Perl: перегоняем строку в массив символов

2010-08-19T00:42:05+07:00

Довольно часто хочется работать со строкой как с массивом символов. Но в Perl это - две разные вещи. Как же получить из одного другое?

Чаще всего рекомендуют следующий способ:

@array = split(//, $string);

Его легко написать и понять. Действительно, если передать функции split //, undef или пустой символ в качестве разделителя, то она разобьёт строку на массив символов. Вопрос исчерпан?

Вы забываете, о каком языке мы говорим. Это Perl, а значит - есть ещё способы сделать это.

@array = unpack(“C*”, $string);

Здесь всё также понятно, просто и быстро. Но если вы - фанат регэкспов, то следующий кусочек кода вам понравится чуть больше:

while (/./g) {…}

Точка в регулярном выражении означает любой символ (кроме новой строки). Чтобы точка ловила и символы новой строки, нужно добавить опцию /g к выражению.

Внутри цикла вы можете использовать переменную $1, где будет храниться текущий символ. Это действительно удобно, потому что решает не саму проблему, а её причину, позволяя работать со строкой посимвольно. Можно также использовать функции index и substr, но я не буду приводить примеров, они похожи.

Чуть проще записать следующее:

@array = ($string =~ /./g)

Это только основные способы, их можно комбинировать для совершенной эзотерики :-)