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

标签 perl

我看到了这样的代码:

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

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

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,
);

再三考虑,您也可以使用它们来创建别名(尽管 Data::Alias 可以使用词法来做到这一点)。
my $foo;
our $bar; local *bar = \$foo;
$foo = 123; say $bar;  # 123
$bar = 456; say $foo;  # 456

关于perl - 在 perl 5.6 之后 Symbol::gensym 是否仍然有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14043392/

相关文章:

perl - 使用 Perl 解析文本文件的最有效方法是什么?

Perl 连接运算符与追加运算符

perl - '\' 在 Perl 中是什么意思?

perl - "no warnings;"在安全隔间

perl - Perl中的map函数是如何实现的?

c - 如何在 C 和 Perl 中反转一个句子

linux - 如何从 cron 条目中自动清除 perl 脚本日志?

html - 如何匹配不在标签内的 HTML 文本?

Perl:如何从特定模式开始逐字读取文本文件?

perl - perl 中的 xargs 等价物