Как я могу разделить строку только на две части с помощью Perl?

У меня есть строка с несколькими частями, разделенными вкладками:

 Hello\t2009-08-08\t1\t2009-08-09\t5\t2009-08-11\t15

Я хочу разделить его только на первой вкладке, чтобы «Привет» заканчивалось на $k, а остальное — на $v. Это не совсем работает:

my ($k, $v) = split(/\t/, $string);

Как я могу это сделать?


person biznez    schedule 11.09.2009    source источник
comment
На самом деле, я только что прочитал документ для split() и был сбит с толку; погуглил и пришел сюда. Где я нашел ответ.   -  person Chap    schedule 25.01.2013


Ответы (3)


Чтобы получить это, вам нужно использовать третий параметр для split(), который дает функция максимальное количество полей для разделения (если положительное):

my($first, $rest) = split(/\t/, $string, 2);
person Chris Lutz    schedule 11.09.2009
comment
Что делать, если длина значения неизвестна, а я хочу зафиксировать все это в $v. Формат $v будет выглядеть как date_1\tvalue_1\tdate_2\tvalue_2\tdate_3\tvalue_3... - person biznez; 11.09.2009
comment
Это зафиксирует date_1 в $k и value_1\tdate_2\tvalue_2\tdate_3\tvalue_3... в $v. Для получения дополнительной информации я связался со справочной страницей perldoc по функции split() — она объяснит, как она работает, со всеми подробностями, которые вы когда-либо могли пожелать. Я предлагаю вам прочитать это. Perldoc очень информативен. - person Chris Lutz; 11.09.2009

Нет. Он даст вам первые два предмета и бросит остальные. Попробуй это:

my ($k, $v) = split(/\t/, $string, 2);
person Jeremy Bourque    schedule 11.09.2009
comment
Что делать, если длина значения неизвестна, а я хочу зафиксировать все это в $v. Формат $v будет выглядеть как date_1\tvalue_1\tdate_2\tvalue_2\tdate_3\tvalue_3... - person biznez; 11.09.2009
comment
Как сказал Крис Лутц в своем комментарии, число говорит Perl, на сколько частей нужно разделить. Таким образом, при значении 2 первая часть идет в $v, первая часть \t расходуется при разделении, а оставшаяся часть строки без изменений переходит в $v. - person Jeremy Bourque; 11.09.2009

Другой вариант - использовать простое регулярное выражение.

my($k,$v) = $str =~ /([^\t]+)\t(.+)/;
person Brad Gilbert    schedule 15.09.2009