作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用命名参数将词法文件句柄传递给子例程,但以下内容无法编译:
#!/usr/bin/perl -w
use strict;
my $log_fh;
my $logname = "my.log";
sub primitive {
my ($fh, $m) = @_;
print $fh $m;
}
sub sophisticated {
my ($args) = @_;
print $args->{m};
print $args->{fh} $args->{m} ;
}
open $log_fh, ">", $logname;
print $log_fh "Today I learned ...\n";
primitive($log_fh,"... the old way works ...\n");
sophisticated({
fh=>$log_fh,
m=>"... and the new way requires an intervention by SO.",
});
close $log_fh;
Scalar found where operator expected at ./lexical.file.handle.pl line 15, near
} $args"
(Missing operator before $args?)
$ perl --version
This is perl, v5.10.1
最佳答案
当您有一个返回文件句柄的复杂表达式(如 $args->{fh}
)时,您需要通过添加一些额外的花括号来消除语法歧义:
print { $args->{fh} } $args->{m};
print
的奇怪方式运算符被设计为在文件句柄和要打印的内容列表之间没有逗号。
my $fh = $args->{fh};
print $fh $args->{m};
关于Perl:如何将词法文件句柄作为命名参数传递和使用给子例程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3120443/
我是一名优秀的程序员,十分优秀!