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

前端之家收集整理的这篇文章主要介绍了如何将文件名传递给perl中的子程序?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在写一个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”的文件句柄.这是拼写错误吗?

猜你在找的Perl相关文章