Perl - File::pushd
File::pushd が
{ $dir = pushd "/usr/local"; ... }
より
pushd "/usr/local" => sub { ... };
みたいにかけた方がかっこいいと思ったので書いてみた。
#!/usr/bin/env perl use strict; use warnings; use Cwd qw(cwd); sub pushd { if (@_ == 1) { my $target = shift; my $orig = cwd; chdir $target or die "chdir $target: $!"; bless { orig => $orig }, "_Pushd"; } elsif (@_ == 2) { my ($target, $cb) = @_; my $dir = pushd($target); $cb->(); } } sub _Pushd::DESTROY { my $self = shift; chdir $self->{orig} or warn "chdir $self->{orig}: $!"; } warn cwd; pushd "/usr/local" => sub { warn cwd; }; warn cwd; __END__ > perl pushd.pl /Users/skaji at pushd.pl line 24. /usr/local at pushd.pl line 27. /Users/skaji at pushd.pl line 30.