Разделить значения из переменной в два поля

У меня есть переменная, в которой есть два значения, разделенные точкой с запятой. Я хочу получить одно из этих значений в одну переменную, а другое в другую переменную. Я пытаюсь сделать это с помощью:

my $firstField = `echo $line | awk -F; '{print $1}'`;

Но это очень странно интерпретируется. Как лучше я бы это сделал?

2 ответа

Решение

Здесь абсолютно нет необходимости привлекать какой-либо внешний инструмент. Используйте Perl!

my $firstField = (split(/;/, $line))[0];

Внешние скобки требуются из-за правила Perl "Если это похоже на вызов функции, то это вызов функции". Без лишних скобок [0] интерпретируется как индекс вызова функции (который является недействительным), а не как индекс списка, который возвращается.

Или, если вы предпочитаете:

my ($firstField) = split /;/, $line;

Это присваивает первое значение списка, возвращаемого split к переменной.

Вы можете получить столько, сколько захотите, с одним вызовом split: если вы хотите их в скалярных переменных, используйте

    my ($a, $b) = split(";", $inputstring); # add $c, $d, etc as you like to the list

или чтобы получить номер переменной в массиве, используйте:

    my @parts = split(";", $inputsring);
Другие вопросы по тегам