我正在写一个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";
open(A,">$name") or die "Could not open $name: $!\n";
(我已经添加了丢失的逗号 – 我认为这是一个错字.)
2 /这一天,使用三arg版本的open和lexical文件句柄通常被认为是一种好习惯.
open(my $output_fh,'>',$name) or die "Failure: $name \n";