-3

在 Perl 中,以下表达式的作用是:

$datarow =~ s/,null/,/g;
4

3 回答 3

6

s/pattern/replacement/是一个命令,告诉 perl 将第一次出现的替换patternreplacement.

s/pattern/replacement/g导致命令替换所有出现,而不仅仅是第一个。

您的代码所做的是找到所有出现的,null并替换它们,(它删除null每个逗号之后的)。

于 2013-06-28T17:57:39.053 回答
1

这是一个简单的替换命令:

$string =~ s/find/replace/;

在上面,变量$string正在改变。字符串的第一个实例find将替换为replace. 1

在末尾添加 ag意味着global,并且它将替换findwith的所有实例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'

1我在这里简化了。find不仅仅是一串字母和数字,而是一个正则表达式。正则表达式是一个强大的概念,但大多数开发人员并未完全理解这一神秘概念。然而,这里没有使用正则表达式的魔法咒语,所以这只是描述文字,null字符串。

不过,您应该花时间查看Perl 中包含的正则表达式教程。

于 2013-06-28T18:37:37.103 回答
0

在 Perl 中,s/after=~表示您正在执行替换(而不是m/after =~which 是匹配评估),the,null是您要替换的字符串,,位于 middle 之后//g表示它是全局替换,否则'将只替换第一次出现...

于 2013-06-28T18:00:13.970 回答