gpt4 book ai didi

perl - 如何避免 perl 命令行参数错误并使用严格

转载 作者:行者123 更新时间:2023-12-04 10:10:26 26 4
gpt4 key购买 nike

为什么我添加 use strict; use warnings; 后我的代码不起作用?有没有办法让它工作?

以前,工作代码是:

#!/usr/bin/perl -s
print "x: $x\n";
print "y: $y\n";

我运行的命令是 perl -s test.pl -x="hello" -y="world" .输出是:
x: hello
y: world

但是,在我添加 use strict; use warnings; 之后,我收到以下错误:
Variable "$x" is not imported at test.pl line 4.
Variable "$y" is not imported at test.pl line 5.
Global symbol "$x" requires explicit package name at test.pl line 4.
Global symbol "$y" requires explicit package name at test.pl line 5.
Execution of test.pl aborted due to compilation errors.

我知道我需要申报 my $xmy $y修复第三个和第四个错误。但是前两个错误是什么意思,我该如何克服它?

最佳答案

实际上,将这些变量声明为词法( my )变量将无济于事,因为为时已晚: -s开关将已经设置它们。它设置全局(包)变量(在您的情况下, $main::x$main::y ,或 - 作为特殊速记 - $::x$::y )。如果您不想使用它们的包限定名称来引用它们,那么您可以使用 our声明表明裸名 $x$y引用 $x$y在当前包中:

our ($x, $y);
print "x: $x\n";
print "y: $y\n";

(感谢 derobert 指出您可以使用 our 来实现这一点。)

或者,您可以将全局变量复制到同名的词法变量中:
my ($x, $y) = ($::x, $::y);
print "x: $x\n";
print "y: $y\n";

这将处理两组诊断。

关于perl - 如何避免 perl 命令行参数错误并使用严格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9595434/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com