【问题标题】:How can I limit the number of returned items in Perl's split?如何限制 Perl 拆分中返回的项目数量?
【发布时间】:2011-04-27 19:27:41
【问题描述】:

我在解析包含数千行的复杂文件时遇到问题。

几天前我已经实现了我的 Perl 脚本。

 my ($head, $tail) = split /=/, $line;

我几乎所有的源文件$line 样式如下:

constant normalLines = <type value>     /*  hello world  */

我可以得到输出$tail = /* hello world */

今天我这样解析行时发现了一个bug(行中有两个=

constant specialLine = <type value>     /*  hello = world  */

但现在输出是$tail = /* hello

如何修复我在上面的代码中仍然使用split() 的错误?我仍然想要输出$tail = /* hello = world */

【问题讨论】:

    标签: perl parsing split


    【解决方案1】:

    你可以指定limit参数告诉split你最多需要多少个零件:

    # split /PATTERN/,EXPR,LIMIT
    
    my ($head, $tail) = split /=/, $line, 2;
    

    【讨论】:

    • 太好了。我不知道如何更好地描述我的问题。但是你输入了我真正需要的东西。我现在想把它标记为我的答案。但我必须再等 6 分钟。哈哈。非常感谢。
    • 每当您对 Perl 函数有疑问时,请阅读其文档。这个答案已经在那里了。 :)
    【解决方案2】:

    @Thilo 关于如何解决这个问题是完全正确的,但问题的根源在于您正在以一种导致列表项被删除的方式进行列表分配。像你一样进行拆分会产生以下列表:

      ["constant specialLine ", " <type value>     /*  hello ", " world  */"]
    

    当你在列表赋值中使用它时,你取前两个值,其余的被丢弃。

    【讨论】:

    • 感谢您的意见。这就是我喜欢 SOF 的原因。有时我可以收到一些不错的 cmets,即使我已经得到了答案,并且在这里更深入地了解了我原来的问题。顺便提一句。我学会了一个新的英文单词Nerd。 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 2020-12-09
    相关资源
    最近更新 更多