6

私はそのようなコードを見ました:

my $fh = gensym;                                             
open $fh, ">$name" or die "Can't create $name: $!";

次のように記述できます。

open my $fh, ">$name" or die "Can't create $name: $!";

単なるレガシーですかgensym、それとも場合によってはまだ役に立ちますか?

4

1 に答える 1

8

遺産。古いモジュールではレキシカルではなくグロブが必要になることがありますが、それだけです。

use IPC::Open3 qw( open3 );
open(local *CHILD_STDIN, '<', '/dev/null') or die $!;
my $pid = open3(
   '<&CHILD_STDIN',
   my $CHILD_STDOUT = gensym(),
   my $CHILD_STDERR = gensym(),
   $cmd, @args,
);

よく考えてみると、それらを使用してエイリアスを作成することもできます (ただし、Data::Aliasはレキシカルでこれを行うことができます)。

my $foo;
our $bar; local *bar = \$foo;
$foo = 123; say $bar;  # 123
$bar = 456; say $foo;  # 456
于 2012-12-26T16:54:47.353 に答える