サブルーチン名に「!」「?」を使おうとしてうまくできていない
Rubyでは「!」がつくメソッド名は、破壊的を意味する。「?」がつくメソッド名は、真偽値を返却する。
逆輸入的にPerlでも同じことができないか考えてみた。(CPANなしで考えてみた)
なんか…あんまり綺麗じゃないけれどこんな感じでやっつけた。
package Xubname; use strict; use warnings; use base qw/ Exporter /; our @EXPORT = qw/ sub /; sub sub ($&) { no strict 'refs'; *{"main::$_[0]"} = $_[1]; } 1; __END__
mainに直接入れる。
#!perl use strict; use warnings; use Xubname; &sub('odd?', sub { return $_[0] % 2; }); # test for my $i (1..10) { if ('odd?'->($i)) { print "$i is odd.\n"; } } &sub('sort!', sub (@) { my @sorted = sort @_; for (my $i = 0; $i < @_; $i++) { $_[$i] = $sorted[$i]; } }); # test my @list = qw/ 8 9 2 4 7 1 5 6 3 /; 'sort!'->(@list); print "@list\n";
1 is odd. 3 is odd. 5 is odd. 7 is odd. 9 is odd. 1 2 3 4 5 6 7 8 9
この「文字列から呼び出す」っていうのがなんとかできないかなー。