備忘録。単独記事に書くまでもない小ネタ。
Perl 5.10で追加された予約語(“say”、“given ~ when”、“state”)などをワンライナーで使うときは“-e”の代わりに“-E”を使う。
$ perl -E 'say "Hello, World!"' Hello, World!
Perl 5.8だか5.10だかわからんときは、“-l”オプションを付けておくとprintがsayに変身するので便利。
$ perl -le 'print "Hello, World!"' Hello, World!
スクリプトの一行目(shebang)にオプションを書いても良い。
#!/usr/bin/perl -l print "Hello, World!";
これは「$\ = $/;」を本文に含むことと等価だ。そのため、「$/」特殊変数をいじるオプション(“-0”など)と共に利用するときは順番に注意しないといけない。
$ perl -e '$\ = $/; print "Hello, World!"' Hello, World!
スカラーコンテキストでsplitすると、結果が@_に入る。
#!/usr/bin/perl -l split //, "abcde"; print join " - ", @_; # 実行結果 # a - b - c - d - e
「$,」特殊変数を使うと、print、sayで出力するときにセパレータが入る。
$ perl -le '$, =", "; $_ = "a1b1c"; split "1"; print @_' a, b, c
ダブルクォート文字列の時は「$"」特殊変数を使う。(上の例と結果は同じだ)
$ perl -le '$" =", "; $_ = "a1b1c"; split "1"; print "@_"' a, b, c
勿論ファイルに出力するときも効く。joinを使わずにCSVファイルが作れる。
#!/usr/bin/perl -l use IO::File; local $, = ","; my @row = qw! a b c !; my $fh = IO::File->new( "test.csv", "w" ); $fh->print( @row ); # 実行結果 # a,b,c
%INCを参照すると、すでに読み込まれたモジュールへのパスが得られる。モジュールを読み込んでいるかどうかで処理を変えたい場合に使うと便利。
$ perl -MTime::HiRes -le 'print "$_ => $INC{ $_ }" for sort keys %INC'
AutoLoader.pm => /opt/local/lib/perl5/5.10.1/AutoLoader.pm
Config.pm => /opt/local/lib/perl5/5.10.1/darwin-2level/Config.pm
Config_git.pl => /opt/local/lib/perl5/5.10.1/darwin-2level/Config_git.pl
Config_heavy.pl => /opt/local/lib/perl5/5.10.1/darwin-2level/Config_heavy.pl
DynaLoader.pm => /opt/local/lib/perl5/5.10.1/darwin-2level/DynaLoader.pm
~以下略~
