我看到这样的代码:
my $fh = gensym;
open $fh, ">$name" or die "Can't create $name: $!";
Run Code Online (Sandbox Code Playgroud)
可以写成:
open my $fh, ">$name" or die "Can't create $name: $!";
Run Code Online (Sandbox Code Playgroud)
是gensym仅仅遗留或仍然在某些场合有用吗?
遗产.旧模块有时需要全球而不是词汇,但就是这样.
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,
);
Run Code Online (Sandbox Code Playgroud)
第二个想法,你也可以使用它们来创建别名(虽然Data :: Alias可以用词法来做).
my $foo;
our $bar; local *bar = \$foo;
$foo = 123; say $bar; # 123
$bar = 456; say $foo; # 456
Run Code Online (Sandbox Code Playgroud)