【问题标题】:perl split function returns infinite arrayperl split 函数返回无限数组
【发布时间】:2015-01-20 08:23:03
【问题描述】:

我认为这里有一个错误。我有一个由“:”分隔的数字组成的字符串。当我使用 split() 时,列表项的数量不是数字,它返回“1289,2235,2300,2336”。这里有什么问题?

#!/opt/local/bin/perl

$data="10:2284:2345:2381:9:2235:2300:2336:8:2212:2273:2320:7:2194:2262:2295:6:2165:2232:2269:5:2118:2167:2205:4:2086:2142:2161:3:2039:2106:2138:2:2034:2088:2127:1:2028:2079:2109:01:1999:2046:2080:02:1972:2016:2052:03:1960:1987:2019:04:1915:1945:1971:05:1870:1888:1911:06:1798:1828:1855:07:1764:1789:1809:08:1692:1728:1753:09:1665:1688:1706:010:1636:1657:1679:011:1575:1607:1641:012:1549:1582:1620:013:1485:1539:1582:014:1395:1485:1540:015:1382:1456:1504:016:1368:1422:1465:017:1301:1360:1405:018:1267:1252:1283:019:1213:1252:1283:020::1159:1180:021::1112:1143:022::1087:1094::";

@l = split(':',$data);

print scalar @l ;

【问题讨论】:

  • 我已经尝试过了,它返回 128。看起来您稍后在代码中打印了其他内容。而且由于您的打印语句末尾没有换行符,它将连接到print scalar @l ; 的输出
  • 也适合我。您稍后打印的内容出现在原始字符串中的第 4 个冒号之后。

标签: arrays perl split


【解决方案1】:

您的代码对我来说运行良好 - 我在运行它时会打印出 128。 我认为会让你绊倒的事情是你不打印换行符。例如。 \n 或使用 say

所以你的号码是:1289,2235,2300,2336,这意味着代码的 this 位正在打印128,而代码中的其他地方正在打印9,2235,2300,2336

如果您可以提取更多代码并生成 MCVE(最小的完整可验证示例),StackOverflow 的优秀人员可以进一步帮助您。我怀疑当你这样做时,你的问题就会消失 - 虽然 perl 中存在错误,但它是一种相当成熟的语言,所以除非你做一些特别模糊的事情,否则这些错误不会出现。

【讨论】:

    猜你喜欢
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    相关资源
    最近更新 更多