Perl日記

日々の知ったことのメモなどです。Perlは最近やってないです。

サブルーチン名に「!」「?」を使おうとしてうまくできていない

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


この「文字列から呼び出す」っていうのがなんとかできないかなー。