Почему split на `` `(pipe) работает не так, как ожидалось?

У меня есть строка, которую я хочу разбить. Но разделитель определяется во время выполнения, поэтому мне нужно передать его как переменную.

Нечто вроде my @fields = split(/$delimiter/,$string); не работает. Любые мысли?


Вход:

abcd|efgh|23

Ожидаемый результат:

abcd
efgh
23

Ответ 1

Вам нужно избегать разделителя, поскольку он является специальным символом в регулярных выражениях.

Вариант 1:

$delimiter = quotemeta($delimiter);
my @fields = split /$delimiter/, $string;

Вариант 2:

my @fields = split /\Q$delimiter/, $string;