OrePANを弄っているときに、任意のスコープで一時的にchdirして作業後、スコープ外れれば自動で元のディレクトリに戻るモジュールあれば欲しいなと思ったので書いてみた。 use Cwd::Guard; use File::Temp; use Path::Class; my $tmpdir = Path::Class::dir(File::Temp::tempdir()); my $pkgdir; { my $guard = cwd_guard($tmpdir); # chdir to $tmpdir my($root, @others) = `tar ztf $tarfile` or die "Bad archive $tarfile"; chomp $root; $root =~ s{^(.+?)/.*$}{$1}; system "tar", "zxf", "$tarfile"; d