Разделить значения из переменной в два поля
У меня есть переменная, в которой есть два значения, разделенные точкой с запятой. Я хочу получить одно из этих значений в одну переменную, а другое в другую переменную. Я пытаюсь сделать это с помощью:
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);