В Perl, что делает следующее выражение сделать:Что Perl регулярное выражение, разделенных запятыми означают
$datarow =~ s/,null/,/g;
В Perl, что делает следующее выражение сделать:Что Perl регулярное выражение, разделенных запятыми означают
$datarow =~ s/,null/,/g;
s/pattern/replacement/
является команда, которая говорит Perl, чтобы заменить первое вхождение pattern
с replacement
.
s/pattern/replacement/g
заставляет команду заменить все вхождения, а не только первую.
Что делает ваш код, он находит все вхождения ,null
и заменяет их ,
(удаляет null
после каждой запятой).
В Perl, то s/
после =~
означает, что вы делаете замену (в отличии от m/
после =~
который является оценкой матча), то ,null
является строкой, которую вы хотите заменить ,
, который приходит после того, как средний /
и /g
означает, что это глобальная замена, в противном случае это будет просто заменить первый ...
Это простая команда замены:
$string =~ s/find/replace/;
В выше, тыс e изменяется $string
. Первый экземпляр строки find
будет заменен на replace
.
Добавление g
на конце означает глобальной, и что она заменит все экземпляры find
с replace
.
В вашей команде изменяется переменная $datarow
. Все экземпляры ,null
заменяются только запятой. Попробуйте использовать следующий скрипт:
#! /usr/bin/env perl
use strict;
use warnings;
use feature qw(say);
my $datarow = "this,that,null,this,that,null,this,this,that";
$datarow =~ s/,null/,/g;
say "Datarow is equal to `$datarow'";
Идите дальше и попробуйте эту программу. Он должен вывести:
Datarow is equal to `this,that,,this,that,,this,this,that'
я упростил здесь. find
- это не просто строка букв и цифр, а regular expression. Регулярное выражение - это мощная концепция, но загадочная концепция, которую большинство разработчиков не понимают в полной мере. Однако здесь не используются никакие магические заклинания регулярных выражений, так что это просто описание строки литерала ,null
.
Тем не менее, вы должны потратить время на изучение учебника Regular Expression, который включен в Perl.
['perldoc perlre'] (http://perldoc.perl.org/perlre.html) и [' perldoc perlop'] (http://perldoc.perl.org/perlop.html) – pilcrow
Запятая незначительный; это просто запятая. –
Не будьте слишком тяжелы на OP. Это не стандартный способ, как обычно пишется функция, и сбивает с толку, когда вы не используете ее. В PHP это было бы как-то вроде '$ datarow = ereg_replace (", null ",", ", $ datarow);" То есть есть ясная функция ('ereg_replace'), ясный набор аргументов (' " , null "', '", "' и '$ datarow), и переменная, которая получает значение (снова' $ datarow').Конструкция sed/awk от Perl может быть очень трудно понять, если вы не человек Unix. –