в программе
my $text = "Also there is a reinforced stone wall, a wooden wall, a stone wall, "
. "randomperson, a lumbering earth elemental, randomperson, "
. "randomperson, randomperson."
my @single_words =
grep { split == 1 }
split /\s*,|\.|\!|;\s*/,
($text =~ /Also there is (.*)/)[0];
Регулярное выражение $text
получает текст после этой начальной фразы, затем split
возвращает список строк между запятыми (или другими пунктуацией), а grep
отфильтровывает строки, содержащие более одного слова & dagger; .
В командной строке
echo "Also there is a reinforced stone wall, a wooden wall,..., randomperson,..."
| perl -wnE'say for
grep { split == 1 }
split /\s*,|\.|\!|;\s*/, (/Also there is (.*)/)[0]'
То же, что и выше.
Пожалуйста, покажите нам, что вы пробовали для дополнительных объяснений и комментариев.
& кинжалом; & thinsp; Одинокий split
использует значения по умолчанию, split ' ', $_
, где ' '
- это специальный шаблон, который разбивается на \s+
и отбрасывает начальное и конечное пространство. Но в выражении split == 1
* * split
находится в скалярном контексте (навязывается оператором ==
, которому нужно одно значение с обеих сторон), и поэтому возвращает количество элементов в списке. , затем сравнивается с 1
.