当前位置:  开发笔记 > 编程语言 > 正文

如何在Perl中跳过非空格或数字的行?

如何解决《如何在Perl中跳过非空格或数字的行?》经验,为你挑选了2个好方法。

我正在从这样的文件中读取数据

while (<$fh>)
{
        @tmp = split; # <-- ?
        push @AoA, [@tmp];
}

我有几个问题.标记线有什么作用?它是否按行分割文件并将每行的元素存储到数组中?如果是这样,是否可以将@tmp转换为字符串或在@tmp上执行正则表达式?

基本上我想停止将数据推送到AoA上,如果我在文件中找到除空格或整数之外的任何内容.我已经有了正则表达式:\ ^ [\ s\d]*$ \



1> Nathan Fellm..:

[ @tmp = split;]是简写:

@tmp = split " ", $_, 0;

这类似于

@tmp = split /\s+/, $_, 0;

但忽略任何前导空格,所以" foo bar baz"变成("foo", "bar", "baz")而不是("", "foo", "bar", "baz").

$fh使用文件处理程序中的每一行并将其拆分,使用空格作为分隔符.

关于你想做什么,为什么不$_开始运行正则表达式?那是一个字符串.

你可以这样做:

while (<$fh>) {
    last unless  /^[\s\d]*$/; # break if a line containing something 
                              # other than whitespace or a number is found
    @tmp = split;
    push @AoA, [@tmp];
}


顺便说一句,如果你对Perl扩展这样的快捷方式感到好奇,你可以使用B :: Deparse模块:perl -MO = Deparse -lne'print +(split)[0]'

2> brian d foy..:

当您想知道Perl内置的功能时,请阅读其文档.您获得的大部分答案仅仅是重述文档.使用任何语言的关键是学习如何使用其文档.如果您已经阅读了文档并且不明白,请在您的问题中提及:)

您可以在perlfunc页面中查看所有内置函数.

在命令行中,您可以使用-f开关来perldoc只提取内置文档: perldoc -f split

祝好运, :)

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有