読者です 読者をやめる 読者になる 読者になる

北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

Re: 知ってそうで意外と知られていないperlの小技 10選

perl+web

意外と知られていないperlテクってのが、意外とあるもんですね。

最近身の回りでいくつか話題に上がったものがあったので、ちょっと書いてみます。

知ってそうで意外と知られていないperlの小技 10選

こういうトリビア的なのはなかなか面白いなあと思ったので便乗させて頂きました。

Re: ランダムシャッフル

続いてこれもソートねた。

これは List::Util::shuffle の方がベターでしょう。*1

% perl
use List::Util;
print join ' ', List::Util::shuffle qw( 0 1 2 3 4 5 6 7 8 9 );
print "\n";
1 8 6 3 0 2 7 5 9 4

Re: perlとだけ叩いたら

そんなあなたは、まずコンソールに向かって「perl」とだけ打ってリターンしてみてください。

ちなみに、perlrunを読めば書いてますが、 "perl -" とすると、コマンドライン引数も渡せます。

% perl - hoge
print @ARGV, "\n";
hoge

Re: モジュールの格納場所をしる

%INCにはそのプログラムでロードしているモジュールのパスがハッシュとして格納されています。

さらに、 $0 は実行中のコマンド、 __FILE__ はこのシンボルが書かれているファイルのPATHに展開されます。

% cat foo.pl
require 'hage.pl';

% cat hage.pl
print $0, "\n";
print __FILE__, "\n";

% perl foo.pl
foo.pl
hage.pl

Re: モジュールのメソッドを上書きする

わざわざ継承するのも大げさっていうような場合は思い切ってそのクラスの当該メソッドを再定義してしまいましょう!

事前にundefすると、 no warnings 'redefine' しなくとも警告は出ません。

use strict;
use warnings;

sub do_something { ... }

undef &do_something;
*do_something = sub { print "Implemented.\n" };

do_something;

*1:sortの中の関数は全順序関係である必要があるので、 rand を使うのは誤っており、動くのはたまたまと言ってもいいでしょう。