当我说简单时,我的意思是,在表达式中,这样我就可以将其作为哈希中的值而不先准备它。我会发布我的解决方案,但我正在寻找一个更好的提醒我少VB的解决方案。 :)
答案 0 :(得分:28)
答案 1 :(得分:4)
这并不是你想要的那么简单,但简单只是为了做空并不总是目标。
您可以在字符串上打开文件句柄(作为标量参考)并将其视为文件以读取第一行:
my $string = "Fred\nWilma\Betty\n"; open my($fh), "<", \$string or die ...; # reading from the data in $string my $first_line = <$fh>; # gives "Fred" close $fh;
如果你真的想,我想你可以把它减少到一个表达式:
$hash{$key} = do { open my($fh), "<", \$string; scalar <$fh> };
无论选择哪种方法,都可以使用子程序返回第一行,然后在哈希赋值中使用子程序调用。
sub gimme_first_line { ... } $hash{$key } = gimme_first_line( \$string );
答案 2 :(得分:2)
($str =~ /\A(.*?)$/ms)[0];
对于大字符串,这将比
更快(split /\n/, $str)[0]
按照曼尼的建议。 [编辑:删除错误提及split /\n/, $str, 1
。]
如果要包含终端\n
(如果存在),请在正则表达式中的结束页面之前添加\n?
。
答案 3 :(得分:0)
substr($s, 0, index($s, $/) > -1 ? index($s, $/) || () )