関数の書き換え

知らんかったのでメモ

use strict;
use warnings;

sub puts { print "@_\n" }

my @args = qw/Panty and Stocking with Garterbelt/;
puts(@args);

{
    no strict   'refs';
    no warnings 'redefine';

    my $orgin_puts = *{'main::puts'}{CODE};

  # local *main::puts = sub { $oring_puts->(reverse @_) }; #このスコープ内だけ適用なら local つけるといいっぽい
    *main::puts = sub { $orgin_puts->(reverse @_) };

    puts(@args);
}

puts(@args);

結果

Panty and Stocking with Garterbelt
Garterbelt with Stocking and Panty
Garterbelt with Stocking and Panty

知っていて当然の方法なのかな