Подтвердить что ты не робот

Есть ли один лайнер, чтобы получить первый элемент раскола?

Вместо записи:

@holder = split /\./,"hello.world"; 
print @holder[0];

Можно ли просто сделать однострочный, чтобы просто получить первый элемент раскола? Что-то вроде:

print (split /\./,"hello.world")[0]

При попытке второго примера получить следующую ошибку:

print (...) interpreted as function at test.pl line 3.
syntax error at test.pl line 3, near ")["
4b9b3361

Ответ 1

Вы должны были попробовать свою догадку. Вот как это сделать.

my $first = (split /\./, "hello.world")[0];

Вы можете использовать назначение списка-контекста, которое захватывает только первое поле.

my($first) = split /\./, "hello.world";

Чтобы распечатать его, используйте

print +(split /\./, "hello.world")[0], "\n";

или

print ((split(/\./, "hello.world"))[0], "\n");

Знак плюса существует из-за синтаксической двусмысленности. Он сигнализирует, что все следующее является аргументом для print. В документации perlfunc на print объясняется.

Будьте осторожны, чтобы не следовать ключевому слову печати с левой скобкой, если вы не хотите, чтобы соответствующая правая скобка заканчивала аргументы печати; поместите круглые скобки вокруг всех аргументов (или вставьте a +, но это не выглядит так хорошо).

В приведенном выше случае я нахожу случай с + намного проще писать и читать. YMMV.

Ответ 2

Если вы настаиваете на использовании split для этого, вы можете потенциально разделить длинную строку на несколько полей, чтобы отбросить все, кроме первого. Третий параметр split должен использоваться для ограничения количества полей, в которые нужно разделить строку.

my $string = 'hello.world';

print((split(/\./, $string, 2))[0]);

Но я считаю, что регулярное выражение лучше описывает то, что вы хотите сделать, и полностью избегает этой проблемы.

Либо

my $string = 'hello.world';
my ($first) = $string =~ /([^.]+)/;

или

my $string = 'hello.world';
print $string =~ /([^.]+)/;

выберет для вас первую строку неточечных символов.

Ответ 3

При попытке второго примера получить следующую ошибку:         "синтаксическая ошибка в строке test.pl 3, рядом" ) ["

Нет, если у вас есть предупреждения, как вам следует, вы получите:

print (...) interpreted as function at test.pl line 3.
syntax error at test.pl line 3, near ")["

который должен быть большим ключом к вашей проблеме.