首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Perl中将文件句柄作为函数arg传递

在Perl中将文件句柄作为函数arg传递
EN

Stack Overflow用户
提问于 2013-01-30 08:06:26
回答 1查看 3.8K关注 0票数 3

我希望能够有一个打印到文件但不打开文件的函数--相反,应该将一个已经打开的文件句柄传递给它。这样,文件的打开和关闭只在调用代码块中发生一次。

我试过了:

代码语言:javascript
运行
复制
sub teeOutput
{
    my $str = $_[0];
    my $hndl = $_[1];

    #print to file
    print $hndl $str;
    #print to STDOUT
    print $str;
}

然后在调用它的时候

代码语言:javascript
运行
复制
open(RPTHANDLE, ">", $rptFilePath) || die("Could not open file ".$rptFilePath);

&teeOutput('blahblah', RPTHANDLE);
&teeOutput('xyz', RPTHANDLE);

close(RPTHANDLE);

但这并不管用。

你知道怎么做到这一点吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-30 08:11:11

首先,停止使用全局变量作为文件句柄。

代码语言:javascript
运行
复制
open(my $RPTHANDLE, ">", $rptFilePath)
   or die("Could not open file $rptFilePath: $!\n");

然后..。好吧,这里没有“然后”。

代码语言:javascript
运行
复制
teeOutput($RPTHANDLE, 'blahblah');
teeOutput($RPTHANDLE, 'xyz');
close($RPTHANDLE);

备注:

  • I将teeOutput的参数改为更合理的参数。
  • I删除了指令(&)以覆盖teeOutput的原型。teeOutput甚至没有该指令。

(但如果您必须处理globs,请使用teeOutput(\*STDERR, ...);。)

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14594451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档