gpt4 book ai didi

perl - 当 token 之间没有值时,Perl 拆分函数返回什么?

转载 作者:行者123 更新时间:2023-11-30 23:57:38 24 4
gpt4 key购买 nike

我正在尝试使用 split 函数拆分字符串,但 token 之间并不总是有值。

例如:ABC,123,,,,,,XYZ

我不想跳过多个 token 。这些值位于字符串中的特定位置。但是,当我进行拆分,然后尝试单步执行生成的数组时,会收到“使用未初始化的值”警告。

我试过使用 $splitvalues[x] eq "" 比较值我试过使用 defined($splitvalues[x]) ,但是当 token 之间没有值时,我终生无法弄清楚如何识别拆分函数放入我的数组中的内容。

这是我的代码片段(现在更脆了):

my @matrixDetail = ();

#some other processing happens here that is based on matching data from the
#@oldDetail array with the first field of the @matrixLine array. If it does
#match, then I do the split
if($IHaveAMatch)
{
@matrixDetail = split(',', $matrixLine[1]);
}
else
{
@matrixDetail = ('','','','','','','');
}

my $newDetailString =
(($matrixDetail[0] eq '') ? $oldDetail[0] : $matrixDetail[0])
. (($matrixDetail[1] eq '') ? $oldDetail[1] : $matrixDetail[1])
.
.
.
. (($matrixDetail[6] eq '') ? $oldDetail[6] : $matrixDetail[6]);

因为这只是片段,所以我忽略了其他一些逻辑,但是 if 语句位于从技术上讲返回 @matrixDetail 数组的 sub 中。如果我在矩阵中找不到匹配项并手动将数组设置为空字符串数组,则不会收到任何警告。仅当拆分填充@matrixDetail 时。

另外,我应该提一下,我已经写了将近 15 年的代码,但直到最近我才需要使用 Perl。我的脚本中的逻辑是合理的(或者至少,它有效),我只是在清理我的警告并试图找出这个细微的差别。

最佳答案

#!perl

use warnings;
use strict;
use Data::Dumper;

my $str = "ABC,123,,,,,,XYZ";
my @elems = split ',', $str;
print Dumper \@elems;

这给出:
$VAR1 = [
'ABC',
'123',
'',
'',
'',
'',
'',
'XYZ'
];

它放入一个空字符串。

编辑:请注意 documentation for split() 声明“默认情况下,保留空的前导字段,并删除空的尾随字段。”因此,如果您的字符串是 ABC,123,,,,,,XYZ,,,,那么您返回的列表将与上面的示例相同,但如果您的字符串是 ,,,,ABC,123 ,那么您将在元素 0、1 和 2 中得到一个包含三个空字符串的列表(除了 'ABC''123' )。

编辑 2:尝试倾销 @matrixDetail@oldDetail数组。其中之一很可能不是您认为的长度。在尝试使用这两个列表之前,您还可以考虑检查它们中的元素数量,以确保您拥有与预期一样多的元素。

关于perl - 当 token 之间没有值时,Perl 拆分函数返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4027981/

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