gpt4 book ai didi

string - 为什么 Perl 字符串变得未定义?

转载 作者:行者123 更新时间:2023-12-02 06:35:17 25 4
gpt4 key购买 nike

将多个标量值连接成一个 Perl 字符串的正确方法是什么?

下面的代码是出于调试原因故意写的一系列语句。

my $bill_record;

$bill_record = $acct_no . " |";

$bill_record = $bill_record . defined($w_ptWtrMtrRecRef->{"mtr_addr_no"}) ? $w_ptWtrMtrRecRef->{"mtr_addr_no"} : " " . " |" ;

$bill_record = $bill_record . defined($w_ptWtrMtrRecRef->{"mtr_addr_str"}) ? $w_ptWtrMtrRecRef->{"mtr_addr_str"} : " " . " |" ;

$bill_record = $bill_record . defined($w_ptWtrMtrRecRef->{"mtr_addr_apt"}) ? $w_ptWtrMtrRecRef->{"mtr_addr_apt"} : " " . " |" ;

$bill_record = $bill_record . $issue_date . " |";

| 字符用作分隔符。每行将以 '\n 终止。

在最后一行 $bill_record = $bill_record 之后。 $发行日期。 "|";出现此错误:

Use of uninitialized value $bill_record in concatenation (.) or string at /home/ics/include/WsBillFunc.pm line 1022.
at /home/ics/include/WsBillFunc.pm line 1022

$issue_date 在分配时定义。

什么可能导致 $bill_record 变得未定义,将一堆标量值连接成一个字符串的正确方法是什么?

最佳答案

我不知道为什么 $bill_record 是未定义的。但是如果我明白你想做什么,你就会遇到优先级问题:?: 运算符的优先级低于连接 .,因此

$bill_record = $bill_record . defined($w_ptWtrMtrRecRef->{"mtr_addr_no"})  ?  $w_ptWtrMtrRecRef->{"mtr_addr_no"} : " "  . " |" ;

被视为

$bill_record = ($bill_record . defined($w_ptWtrMtrRecRef->{"mtr_addr_no"}))  ?  $w_ptWtrMtrRecRef->{"mtr_addr_no"} : (" "  . " |") ;

我怀疑这不是您想要的。尝试添加括号:

$bill_record = $bill_record . (defined($w_ptWtrMtrRecRef->{"mtr_addr_no"})  ?  $w_ptWtrMtrRecRef->{"mtr_addr_no"} : " ")  . " |" ;

(或者按照另一位评论者的建议使用 .=。)

关于string - 为什么 Perl 字符串变得未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20820245/

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