1
1

Perl 備忘録

Last updated at Posted at 2024-01-19

環境

項目 説明
OS Windows10
perl Strawberry Perl 5.36.1.1

Version

Strawberry Perl 5.36.1.1 を採用

※ 5.38.0.1は下記ツイートと同じ状況になったため、取り止め

strawberry perlの最新版(5.38.0.1)って,ロケール関係の警告でる.Locale 'Japanese_Japan.932' is unsupported, and may crash the interpreterって言われちゃう.5.36.1.1ではそんなことなかったのに.powershellでロケール変更すれば動くのかもしれないけど,面倒なので,5.36.1.1でいいや.
https://x.com/Dolista/status/1717006043421827140?s=20

日本語の文字化け Wide character

手動

「テスト」をutf8 でdecode し、内部文字列を encode (今回windowsなのでsjis)

$str = Encode::encode('sjis', Encode::decode('utf-8', 'テスト'));
print($str."\n"); #テスト

自動

use utf8で 内部文字列化
binmode で 内部文字を cp932 encode

use utf8;
binmode(STDOUT, ':encoding(cp932)');

クラスの記述方法

#!C:\Strawberry\perl\bin\perl
package hiro;
use utf8;
use strict;

# クラス変数
our $count = 0;

# コンストラクタ(生成関数)
sub new {
    my($class, $name) = @_;     # 第1引数はクラス名
    my($self) = {};             # 無名参照オブジェクトを生成
    bless($self, $class);       # オブジェクトとクラス名を関連付け
    $self->{NAME} = $name;      # 属性を初期化
    $count++;                   # クラス変数を更新
    return $self;               # オブジェクト(無名参照)を返す
}

# デストラクタ(消滅関数)
sub DESTROY {
    my($self) = @_;             # 第1引数はオブジェクト
    $count--;                   # クラス変数を更新
}

# メソッド:オブジェクトの総数を返す
sub getCount {
    return $count;
}

# メソッド:NAME属性を設定する
sub setName {
    my($self, $name) = @_;
    $self->{NAME} = $name;
}

# メソッド:NAME属性を参照する
sub getName {
    my($self) = @_;
    return $self->{NAME};
}
1;          # use がエラーにならないように 0 以外の値を記述しておく
項目 説明 備考
strict 宣言強制 our my がないとコンパイルエラーになる
our グローバル変数=パッケージとの紐付いた変数 our $count = 0;の場所でmyにするとコンパイルエラーになる。
my レキシカル変数≒ローカル変数 スコープの中で有効な変数

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1