gpt4 book ai didi

string - 字符串 'eq' Perl 中的未初始化值

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

我收到一条运行我的 Perl 脚本之一的警告。错误被抛出一个简单的 if我正在测试数组中的字符串是否等于另一个字符串的语句。

我和我的同事尝试了几种情况,但仍然无法解决警告。到目前为止,我已经尝试将我所有的研究都放在这个线程中,所以它有点长,但请坚持下去。我完全被困住了,希望 StackOverflow 的一位伟大思想能够帮助我!

产生问题的代码是:

if ($pieces[0] eq "PromotionNumber")

该部分周围的代码块是:
my @pieces = split(/=/, $var);
if($pieces[0] eq "PromotionNumber") {
$promoNumber = $pieces[1];
} elsif ($pieces[0] eq "Type") {
# More similar code follows

我在上面代码中的目标是将我在文本文件中找到的所有变量分配给相应的 Perl 变量。然后我将这些找到的变量插入到 SQL 数据库中。

文本文件有几个可以按不同顺序排列的字段,这就是为什么我使用 switch 样式 if-elsif... 来完成赋值。还有一些我不关心的字段,比如Level,我直接忽略了这些字段。然而,这些字段是导致警告的字段。
$var设置为以下,因为它循环...
PromotionNumber=000
RecordOffset=0
Code=0
SubCode=1
Level=0

当我点击“Level=0”时,我可以在 PerlIDE.exe 调试器中暂停并看到字符串被拆分为 Level 和 0 并插入到数组中。但是,只要代码前进到 if声明和测试 $pieces[0] eq "PromotionNumber"我得到警告。

我什至可以在 if 之前打印出 $pieces[0]语句,它将打印“级别”。

如果我将代码更改为以下内容,警告就会消失......
my @pieces = split(/=/, $var);
if($pieces[0] eq "Level") {
#My problematic variable test
}elsif($pieces[0] eq "PromotionNumber") {
$promoNumber = $pieces[1];
} elsif ($pieces[0] eq "Type") {
#More similar code follows

但是,如果我第二次测试“Level”字符串,警告就会回来。下面的代码确实有警告。
my @pieces = split(/=/, $var);
if($pieces[0] eq "PromotionNumber") {
#My problematic variable test
}elsif($pieces[0] eq "Level") {
$promoNumber = $pieces[1];
} elsif ($pieces[0] eq "Type") {
#More similar code follows

为什么 Perl 关心我测试的顺序?请注意,我正在测试我的 if-elsif 语句中没有给出此警告的多个 elsif 的其他几个字符串。

有任何想法吗?我真的需要清除此警告,以免它在运行时淹没控制台。该脚本正在处理警告。

确切的错误是:

Use of uninitialized value in string eq at japdpmrijob.pl line 250.



确切的错误行(使用 PerlIDE.exe 中的 Perl 调试实用程序确定)是:
if ($pieces[0] eq "PromotionNumber") {

我可以打印出 $pieces[0] 并查看值(value)。所以我知道它是用我的值(value)定义的。我还可以打印出 $pieces[1] 并查看我的预期值。如果我首先测试 $pieces[0] eq "Level",警告就会消失,我可以访问这两个变量。

我还是一头雾水……

看起来错误实际上是被标记为变量的“eq”。有什么想法吗?

您会在下面找到大量代码。我包括了整个 for循环和我正在使用的几个变量。注意 else在 if-elsif-else 序列末尾的语句,我添加了这个以尝试停止警告,如第三个答案所述。这个 else每次调用警告时,语句都会打印我的预期值,因此我知道这些值存在。
for my $cond (@conditions) {
if($debug==1){print $cond."\n";}

# Required database variables
my $isRecord = 0;
my $promoNumber;
my $type;
my $process;
my $testValue;
my $recordOffset;
my $code;
my $subcode;
my $itemType;
my $itemValue;

# Function test variables
my $itemTypeVar;
my $newQualifier = 1;

# Database Configuration
my $dbApps = new Win32::ODBC("myDatabase") || die "Error: " . Win32::ODBC::Error();
my @condVars = split(/\|/, $cond);
for my $var (@condVars) {
if($debug==1){print $var."\n";}
my @pieces = split(/=/, $var);
if( defined($pieces[0]) ){
print "piece 0 defined!\n";
} else {
print "pieces 0 not defined!\n";
}
if( defined($pieces[1]) ){
print "piece 1 defined!\n";
} else {
print "piece 1 not defined!\n";
}
if($pieces[0] eq "PromotionNumber"){
$promoNumber = $pieces[1];
} elsif ($pieces[0] eq "Type"){
$type = $pieces[1];
} elsif ($pieces[0] eq "Process"){
$process = $pieces[1];
} elsif ($pieces[0] eq "TestValue"){
$testValue = $pieces[1];
} elsif ($pieces[0] eq "RecordOffset"){
$recordOffset = $pieces[1];
if ($recordOffset == 0) {
$newQualifier = 1; }
} elsif ($pieces[0] eq "Code"){
$code = $pieces[1];
} elsif ($pieces[0] eq "SubCode"){
$subcode = $pieces[1];
} elsif ($pieces[0] eq "ItemType"){
$itemType = $pieces[1];
if($itemType eq "0") {
$itemTypeVar = "ItemCode";
} elsif($itemType eq "1") {
$itemTypeVar = "ItemCode";
} elsif($itemType eq "2") {
$itemTypeVar = "Department";
} elsif($itemType eq "5") {
$itemTypeVar = "MixMatchCode";
} elsif($itemType eq "12") {
$itemTypeVar = "GroupCode";
}
} elsif ($pieces[0] eq $itemTypeVar){
$itemValue = $pieces[1];
} else {
print "$pieces[0] and $pieces[1] not used.\n";
}
print "$var\n";
}
}

最佳答案

我认为您正在错误的地方寻找错误。对于 if-elsif-else 内部触发的警告语句或其他复杂的代码块,旧版本的 Perl 可能会将警告标识为出现在语句的第一行。

------ warn.pl ------
my $x = 0;
my $y;
if ($x == 1) { # line 3
} elsif ($x == 2) {
} elsif ($x == 3) {
} elsif ($y == 4) { # line 7
}

$ perl5.14.2 -w warn.pl
Use of uninitialized value $y in numeric eq (==) at warn.pl line 7.

$ perl5.8.6 -w warn.pl
Use of uninitialized value in numeric eq (==) at line 3.

关于string - 字符串 'eq' Perl 中的未初始化值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12166336/

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