【发布时间】:2017-04-27 13:06:03
【问题描述】:
我对初始化值有疑问。我有一个具有方法的脚本:
sub compare_with_terminal {
use Term::Size::Any qw( chars pixels );
my $columns = 0;
my $rows = 0;
($columns, $rows) = chars *STDOUT{IO};
print "Columns: ".$columns."\n"; #line 73
print "Rows: ". $rows."\n";
if($height > $columns || $width > $rows){
print "Bigger than terminal: ";
my $option = <>;
chomp($option);
if($option eq "N"){
print "End.";
exit 0;
}
}
}
我创建并初始化了两个值 $columns 和 $rows。但是,当我运行这个脚本时,我得到:
在连接 (.) 或字符串中使用未初始化的值 $columns ./perl/script.pl 第 73 行 (#1) (W 未初始化)一个未定义的值被使用,就好像它已经被使用一样 定义。它被解释为“”或 0,但可能是一个错误。 要抑制此警告,请为您的变量分配一个定义的值。
$rows 有同样的错误。
这些错误表明我没有初始化变量$columns,但我做到了。任何人都可以解释我并尝试解决这个问题?
【问题讨论】:
-
第 73 行是什么? (我猜你没有显示它,因为你没有在你的 sn-p 的任何地方使用
$columns) -
我读取控制台大小并将其写入
$columns和$rows变量。我希望它们是数字,而不是字符串。在 Windows 上一切正常,我没有收到任何错误。 -
@allocer 同样,请显示哪一行是第 73 行,因为那是警告提到的那一行。
-
Re“这些错误说我没有初始化变量$columns”,如果你真的阅读了这个消息,它根本没有说。它说
$columns有一个未定义的值,而不是它没有“初始化”。 (其实在Perl中不初始化是不可能的,标量会自动初始化为undef,数组和哈希初始化为空。) -
@allocer 以后,请复制并粘贴您实际运行的确切代码或创建minimal reproducible example。否则我们很难找到您的问题。
标签: perl variables exception initialization