我正在尝试编写一个从文本文件中读取行的Perl程序,并且,对于每一行,从行中提取第一个“单词”,并根据返回的字符串执行不同的操作。 / p>
主循环如下所示:
while(<AXM60FILE>) {
$inputline = $_;
($start) = ($inputline =~ /\A(.*?) /);
perform something, based on the value of string in $start
}
输入文件实际上是一个参数文件,带有parameter_name和parameter_value,用冒号(“:”)分隔。在冒号之前或之后可以有空格或制表符。
因此,该文件看起来(例如)如下所示:
param1:xxxxxxxxxxxx
param2:xxxxxxxxxxxxx
param3:xxxxxxxxxxxxxxxxx
param4:XXXXXXXXXXXXX
那个“($ start)=($ inputline =〜/\A(.*?)/);”适用于“param2”示例和“param3”示例,其中第一个单词由空格/空格终止,但我如何处理“param1”和“param4”情况,其中parameter_name紧跟冒号?
另外,如果“空白”是制表符或制表符,而不是空格/空格字符呢?
谢谢, 吉姆
答案 0 :(得分:9)
这将涵盖您的所有案例,然后是:
my ($key, $value) = split /\s*:\s*/, $inputline, 2;
(或者,用英语,将$inputline
分成最多两个元素,用任意数量的空格,冒号和任意数量的空格分隔。)
答案 1 :(得分:6)
($start) = $inputline =~ /\A([^:\s]+)/;
这将匹配除空格之外的任何内容以及行尾的:
或者使用split
:
($start) = split /[:\s]+/, $inputline, 2;