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

StackOverflow https://stackoverflow.com/questions/1206464

  •  05-07-2019
  •  | 
  •  

Вопрос

Мой код работал нормально, и теперь он ломается. Проблема заключается в следующем: я хочу разделить исходную строку (из базы данных, но это не важно) на разделитель. Разделитель не является фиксированным, но предоставляется пользователем в виде строки. Раньше я делал это:

@results = split($splitString, $sourceStr);

Но это ломается, когда пользователи запрашивают знак плюс (+) в качестве разделителя. Сообщение немного загадочное:

Quantifier follows nothing in regex; marked by <-- HERE in m/+ <-- HERE

Насколько я понимаю, он ломается, потому что split не ожидает строку, а регулярное выражение. Тем не менее, я не могу найти способ избежать $ splitString таким образом, чтобы он работал. Вот мой игрушечный пример:

  my $s = 'string 1 + $splitChar + string 2';
  my $splitChar = "+";
  my @result = split(/\\$splitChar/, $s);

  print "num of results ".scalar(@result)."\n";
  foreach my $value (@result) {
    print "$value\n";   
  }

Но это совсем не раскололось. Я попробовал несколько вариантов, ни один из которых не работал. Обратите внимание, что указанный пользователем разделитель, вероятно, ограничен одним символом, но многосимвольное решение было бы лучше.

(и да, я мог бы написать свою собственную специализированную функцию разбиения, но это не главное).

( $ splitChar в примере с одиночной кавычкой специально, я думаю, понятно почему).

Это было полезно?

Решение

Первый аргумент split - это шаблон

#!/usr/bin/perl

use strict;
use warnings;

my $sep = '+';
my $source = 'one+two+three';

my @results = split /\Q$sep\E/, $source;

use Data::Dumper;
print Dumper \@results;

См. также perldoc -q " указывать переменную " .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top