Что самый простой путь состоит в том, чтобы возвратить первую строку многострочной строки в Perl?

Вам нужно UNION вместо JOIN:

SELECT name
FROM table1
UNION 
SELECT name
FROM table2;

JOIN используется для сопоставления строк и получения последующих столбцов из объединенных таблиц, в то время как union объединит все строки из двух или более столы.

10
задан brian d foy 9 January 2009 в 21:01
поделиться

4 ответа

Как насчет

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

?

Вы не должны волноваться о \n том, чтобы быть не межплатформенный, потому что Perl достаточно умен для заботы об этом.

28
ответ дан 3 December 2019 в 14:25
поделиться

Это не столь просто как Вам угодно, но быть простым только, чтобы быть коротким не должна всегда быть цель.

Можно открыть дескриптор файла на строке (как скалярная ссылка) и рассматривать его как файл для чтения первой строки:

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 );
4
ответ дан 3 December 2019 в 14:25
поделиться
substr($s, 0, index($s, $/) > -1 ? index($s, $/) || () )
0
ответ дан 3 December 2019 в 14:25
поделиться
($str =~ /\A(.*?)$/ms)[0];

Для больших строк это будет быстрее, чем

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

как предложено Manni. [Редактирование: удаленное ошибочное упоминание о split /\n/, $str, 1.]

Если Вы хотите включать терминал \n если это присутствует, добавить \n? непосредственно перед закрытием paren в regex.

2
ответ дан 3 December 2019 в 14:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: