Если вы хотите взять кусочек массива, вы должны поместить список чисел в скобках [ .. ]
, не строка. Одна строка - это, ее список будет рассматриваться как число и поэтому преобразован в число, но, как вы отметили, это будет только первое число.
Если ты use warnings
включен, который я сильно подозреваю, что вы этого не сделаете, вы получите ошибку:
Argument "3,4\n" isn't numeric in array slice at yourscript.pl ...
Но Perl делает преобразовать эту строку в число, как может, и придумывает 3
.
Итак, вот что вы сделали неправильно. Что вы могли бы сделать вместо этого:
my @nums = $temp =~ /\d+/g;
my @weekdays = @shortdays[@nums];
Что бы извлечь целые числа из строки достаточно простым способом. Это также устранит необходимость использования конкретного разделителя, такого как запятая. Обратите внимание, что скобки для скобок подразумеваются при использовании глобального модификатора /g
.
Если вы настроены на использование запятых, используйте split для извлечения чисел. Но имейте в виду, что это может оставить пробелы и другие нежелательные символы.
my @nums = split /,/, $temp;
При отладке, с помощью инструкции, такие как
print @weekdays;
Это немного сбивает с толку. Я бы рекомендовал вам сделать это:
use Data::Dumper;
...
print Dumper \@weekdays;
Тогда вы увидите, что именно содержит массив.
И, конечно же, добавьте эти две строки для всех ваших скриптов:
use strict;
use warnings;
Если вы использовали это, вы не были бы с этой проблемой. Информация и контроль и сокращение времени отладки, что эти две прагмы обеспечивают больше, чем компенсировать короткую кривую обучения, связанную с их использованием.
это печатает только первый элемент .. например, если я поставлю 3,4 .. он будет печатать только третий элемент – user2235827
[Вы должны использовать строгую и предупреждения] (http://stackoverflow.com/questions/8023959/ why-use-strict-and-warnings) – TLP
['scalar $ temp'] (http://p3rl.org/scalar) ** точно ** совпадает с' $ temp'. –