加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何将文件名传递给perl中的子程序?

发布时间:2020-12-16 06:07:12 所属栏目:大数据 来源:网络整理
导读:我正在写一个perl脚本,我想将输出文件的文件名传递给子程序. 我试过这样的事情: use strict;use warnings;test("Output.dat");sub test { my $name = @_; open(B,"$name") or die "Failure n"; print B "This is a test! n"; close(B); } 我将多次使用子
我正在写一个perl脚本,我想将输出文件的文件名传递给子程序.

我试过这样的事情:

use strict;
use warnings;

test("Output.dat");

sub test {
  my $name = @_;

  open(B,">$name") or die "Failure n";

  print B "This is a test! n";
  close(B); 
}

我将多次使用子程序,所以我必须传递文件名,不能在子程序中声明它.

我希望你能帮帮我 :)

解决方法

你的问题是这一行:

my $name = @_;

您正在为标量变量分配数组.在Perl中,这将为您提供数组中元素的数量 – 所以我希望您在$name中以“1”结尾.

有许多方法可以从数组中获取第一个元素;

my $name = $_[0]; # Explicitly get the first element
my $name = shift @_; # Get the first element (and remove it from the array)
my $name = shift; # Same as the previous example - shift works on @_ by default in a subroutine
my ($name) = @_; # The parentheses make it into a list assignment

最后两个是你最常见的那些.

还有几点:

1 /如果在错误消息中包含$name,您将获得更好的问题线索.

open(A,">$name") or die "Failure: $name n";

或者,更好的是,Perl从您的操作系统获取的错误消息.

open(A,">$name") or die "Could not open $name: $!n";

(我已经添加了丢失的逗号 – 我认为这是一个错字.)

2 /这一天,使用三arg版本的open和lexical文件句柄通常被认为是一种好习惯.

open(my $output_fh,'>',$name) or die "Failure: $name n";

3 /在您的示例中,您打开一个名为“A”的文件句柄,但然后尝试写入名为“B”的文件句柄.这是拼写错误吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读