> perl -wle "print 0||3||1; print 3||1||0; print 1||3||0;" 3 3 1 > perl -wle "(\$a,\$b,\$c)=(0,3,1); \$d=\$a||\$b||\$c; print \$d;" 3 > perl -wle "\@a=map{int rand 3}(0..20); print \@a; print eval(join'||',\@a);" 222112121101120001212 2 > perl -wle "\@a=map{int rand 3}(0..20); print \@a; print eval(join'&&',\@a);" 210100122012201210021 0 >
単体ではほとんど意味をなさないが、このような条件判定は初期値の設定に使える。例えば、引数にディレクトリを取り、そのディレクトリの内容を表示するプログラムを考えてみる。内容を表示したいディレクトリ$dirに下のように代入させることができる。
$dir = $ARGV[0] || './';
ただし、この場合は$ARGV[0]の内容が0や空文字列だった場合には上手くいかない。言い換えれば、0というディレクトリの内容を表示することはできないということだ。もちろん引数に'./0'と指定すれば問題はないが、それではユーザビリティに欠けるというものだ。そんな場合は下のようにするとよいだろう。言い換えれば、引数が指定されていてなおかつ引数の内容が空文字列でない場合、引数をそのまま$dirへ代入、これ以外の場合は、カレントディレクトリを$dirに代入する、ということだ。こうすれば引数に0を指定されたり、コマンドの後に無駄な空白をつけたおかげで引数が定義されてはいるものの意味のない引数(空文字列)だった場合にもまともな結果を返すことができる。
$dir = (defined $ARGV[0] && $ARGV[0] ne '') ? $ARGV[0] : './';