【问题标题】:How can I pass value to Perl Subroutine parameters on command line?如何在命令行上将值传递给 Perl 子例程参数?
【发布时间】:2010-02-11 08:10:19
【问题描述】:

我的 test.pl 脚本如下。

#!C:\Perl\bin\perl.exe
use strict;
use warnings;


sub printargs
{
    print "@_\n";
}

&printargs("hello", "world"); # Example prints "hello world"

如果我将printargs("hello", "world"); 替换为print($a, $b);

当我在命令行运行 perl test.pl hello world 时,如何将 'hello' ,'world' 传递给 $a , $b,谢谢。

【问题讨论】:

  • 您最好从&printargs(...) 中省略&。您不需要它,并且在子调用前加上 & 可能会产生您可能没想到的副作用。

标签: perl parameters subroutine


【解决方案1】:

请阅读perldoc perlvar 中的@ARGV

【讨论】:

    【解决方案2】:

    $ARGV[0] 包含第一个参数,$ARGV[1] 包含第二个参数,依此类推。

    $#ARGV 是@ARGV 数组最后一个元素的下标,所以命令行的参数个数是$#ARGV + 1。

    【讨论】:

    • 您也可以只使用@ARGV 来获取元素的数量。例如: if (@ARGV \n"; }
    【解决方案3】:

    命令行参数位于@ARGV 数组中。只需将其传递给您的函数:

    &print( @ARGV );
    

    最好避免使用像 print 这样的名称 - 可能会与同名的内置函数混淆。

    【讨论】:

    • 谢谢。将 print 修改为 printargs
    【解决方案4】:

    您想在 Perl 中访问“命令行参数”。

    基本上,Perl 将您在实际脚本名称之后传递的字符串视为名为 @ARGV 的数组。

    这里有一个简短的教程:http://devdaily.com/perl/edu/qanda/plqa00001.shtml

    只需谷歌“perl 命令行参数”了解更多信息。

    【讨论】:

      【解决方案5】:

      基本上,正如其他人所说,@ARGV 列表是您问题的答案。

      现在,如果您想更进一步并为您的程序定义命令行选项,您还应该在 getargs. 上查看一下

      【讨论】:

        【解决方案6】:

        这也会在将数据传递给 $a 和 $b 的同时从命令行参数打印“hello world”。

        #!/usr/bin/perl -w
        
        use warnings;
        use strict;
        
        sub printargs($$)
        {
            print $_[0] . " " . $_[1] . "\n";
        }
        
        my($a,$b) = ($ARGV[0],$ARGV[1]);
        printargs($a,$b);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-11-22
          • 2021-03-09
          • 1970-01-01
          • 1970-01-01
          • 2019-10-05
          • 1970-01-01
          • 2013-10-11
          相关资源
          最近更新 更多