よりよいデフォルト値
● 古い定型文が減る方向に
○ use strict; use warnings;
○ use strictはJSにも輸出された
プラグマ
■ 互換性を壊さずに進化するため
● 良いfeatureを有効にする
○ say, module_true, isa, try, ...
26
use v5.42;
# 以下の記述と同じ
use warnings;
use strict;
no feature ':all';
use feature ':5.42';
Slide 27
Slide 27 text
use strict; use warnings;
27
● ファイルの先頭には必ず書きましょう
my $message = "hello";
print $messsage; # typo!
# => エラーにならない!
$messagge = "bye"; # typo!
# => $messagge がグローバル変数になる!
サブルーチン > 引数
82
● 無名サブルーチンを引数で渡すのもよく見る
○ 高階関数やブロックと同じ
sub with_block {
say "start";
$_[0]->(); # 渡された無名サブルーチンを実行
say "end";
}
with_block(sub { say "in block" });
入出力 > 読み込み
107
open my $fh, '<', 'input.txt' or die $!;
while (my $line = <$fh>) {
...;
}
close $fh;
● 有名なor die
○ or の優先順位が低いおかげでカッコが要らない
○ ( open my $fh, '<', $file ) or die $!
Slide 108
Slide 108 text
open my $fh, '<', 'input.txt' or die $!;
local $/ = undef; # 入力区切り文字を変更
my $content = <$fh>; # ファイル全体を一度に読める
close $fh;
入出力 > 読み込み
108
● いわゆるslurpパターン
● 行指向言語なことを示していて慣れたら好き
Slide 109
Slide 109 text
my $content = do { # スコープを抜けたら自動 close
open my $fh, '<', 'input.txt' or die $!;
local $/; # 代入しなくても undef になる
<$fh>;
};
入出力 > 読み込み
109
● こういう書き方をしているところも多いかも
○ do {} はブロックの結果を式として返す
Slide 110
Slide 110 text
open my $fh, '>', 'output.txt' or die $!;
print $fh "Hello\n";
close $fh;
入出力 > 書き込み
110
● printの第1引数にファイルハンドルを渡す
○ デフォルトでSTDOUT
○ 第1引数なのにカンマがないけどそういうものらしい
テスト
133
use Test2::V0;
use Person;
my $person = Person->new(age => 18);
is $person->age, 18, '最初は18歳';
$person->incr_age;
is $person->age, 19, 'incr_age 呼んだら19歳';
done_testing;
Slide 134
Slide 134 text
テスト
134
$ prove -lv
t/Person.t ..
# Seeded srand with seed '20251114' from local date.
ok 1 - 最初は18歳
ok 2 - incr_age 呼んだら19歳
1..2
ok
All tests successful.
Files=1, Tests=2, 0 wallclock secs ( 0.00 usr 0.00 sys + 0.02 cusr 0.00 csys = 0.02 CPU)
Result: PASS