在Perl中返回多行字符串第一行的最简单方法是什么?

时间:2009-01-09 13:39:25

标签: perl string multiline

当我说简单时,我的意思是,在表达式中,这样我就可以将其作为哈希中的值而不先准备它。我会发布我的解决方案,但我正在寻找一个更好的提醒我少VB的解决方案。 :)

4 个答案:

答案 0 :(得分:28)

怎么样

( split /\n/, $s )[0]

您不必担心\ n不是跨平台的,因为Perl is clever enough to take care of that

答案 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, $/) || () )