在perl 5.6之后,Symbol :: gensym是否仍然有用?

时间:2012-12-26 16:36:55

标签: perl

我看到了这样的代码:

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

可以写成:

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

gensym只是遗产还是在某些情况下仍然有用?

1 个答案:

答案 0 :(得分: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