Вам нужно UNION
вместо JOIN
:
SELECT name
FROM table1
UNION
SELECT name
FROM table2;
JOIN
используется для сопоставления строк и получения последующих столбцов из объединенных таблиц, в то время как union
объединит все строки из двух или более столы.
Как насчет
( split /\n/, $s )[0]
?
Вы не должны волноваться о \n том, чтобы быть не межплатформенный, потому что Perl достаточно умен для заботы об этом.
Это не столь просто как Вам угодно, но быть простым только, чтобы быть коротким не должна всегда быть цель.
Можно открыть дескриптор файла на строке (как скалярная ссылка) и рассматривать его как файл для чтения первой строки:
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 );
substr($s, 0, index($s, $/) > -1 ? index($s, $/) || () )
($str =~ /\A(.*?)$/ms)[0];
Для больших строк это будет быстрее, чем
(split /\n/, $str)[0]
как предложено Manni. [Редактирование: удаленное ошибочное упоминание о split /\n/, $str, 1
.]
Если Вы хотите включать терминал \n
если это присутствует, добавить \n?
непосредственно перед закрытием paren в regex.