我正在从这样的文件中读取数据
while (<$fh>) { @tmp = split; # <-- ? push @AoA, [@tmp]; }
我有几个问题.标记线有什么作用?它是否按行分割文件并将每行的元素存储到数组中?如果是这样,是否可以将@tmp转换为字符串或在@tmp上执行正则表达式?
基本上我想停止将数据推送到AoA上,如果我在文件中找到除空格或整数之外的任何内容.我已经有了正则表达式:\ ^ [\ s\d]*$ \
[ @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内置的功能时,请阅读其文档.您获得的大部分答案仅仅是重述文档.使用任何语言的关键是学习如何使用其文档.如果您已经阅读了文档并且不明白,请在您的问题中提及:)
您可以在perlfunc页面中查看所有内置函数.
在命令行中,您可以使用-f开关来perldoc只提取内置文档: perldoc -f split
祝好运, :)