【发布时间】:2020-10-29 10:38:41
【问题描述】:
这里我正在检查每列中存在的最大字宽
my @col_lns;
while (<file>) {
my @row = split " ",$_;
@col_lns = map ((length) @rows) if $. ==1;
for ( my $col_l =0; $col_l <$#row; $col_l+=1) {
my $col_ln = length $row[$col_l];
if ($col_lns[$col_l] < $col_ln) ###Here I am getting warning
{
$col_lns[$col_l] = $col_ln;
}
}
警告 1:
Use of uninitialized value in numeric lt (<)
代码第 2 部分;
my $pack1 = substr($add,4,4);
my $pack2 = substr($add,0,4);
警告 2
Use of $add in substr
substr outside of string
【问题讨论】:
-
你声明了
my $col_ln,但后来你使用了$coln。这是故意的,还是错误的?如果你没有使用use strict,Perl 不会反对你错误地“创建”一个新变量并尝试使用它,它会给出一个未初始化的警告。 -
Use of $add in substr看起来不像是一个真正的警告。看起来您删除了部分警告,例如Use of uninitialized value $add in substr,这将解释另一个错误(未定义的字符串长度为 0)。 -
@HG 你永远不应该在代码不是确切在你尝试运行它时的样子的地方发布问题。这违背了大多数问题的全部目的。如果您没有使用
use strict,请将其添加到您的程序中,修复错误,然后使用固定代码编辑您的问题。 -
Re "你永远不应该发布代码与你尝试运行它时不完全一样的问题。",正确。但需要明确的是,我们也不想要不相关的细节。创建一个显示问题的最小可运行 sn-p,运行它以确保它确实存在,然后发布。
-
Re "我猜你的意思是
map { length } @rows或map(length, @rows)",你仍然可以在第一种语法中使用括号。所以也许他们想要map( { length } @rows )