Perlの小ネタ集


備忘録。単独記事に書くまでもない小ネタ。


Perl 5.10で追加された予約語(“say”、“given ~ when”、“state”)などをワンライナーで使うときは“-e”の代わりに“-E”を使う。

$ perl -E 'say "Hello, World!"'
Hello, World!

Perl 5.8だか5.10だかわからんときは、“-l”オプションを付けておくとprintsayに変身するので便利。

$ 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

$,」特殊変数を使うと、printsayで出力するときにセパレータが入る。

$ 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
~以下略~

コメントを残す