環境
| 項目 | 説明 |
|---|---|
| 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 | レキシカル変数≒ローカル変数 | スコープの中で有効な変数 |