Perl分号在语句结束时

Akk*_*ved 5 perl

;用作语句分隔符,所以将多个;在声明的结尾是罚款,它只是增加了空语句.

我遇到了这个代码,最后有多个;但删除它们会导致错误:

$line =~s;[.,]$;;;
Run Code Online (Sandbox Code Playgroud)

应该是一样的

$line =~s;[.,;]$;
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.这是怎么回事?

Fil*_*efp 13

在您提供的代码段中,a ;用作search-n-replace正则表达式的分隔符.

$line =~s;[.,]$;;;
Run Code Online (Sandbox Code Playgroud)

相当于

$line =~ s/[.,]$//;
Run Code Online (Sandbox Code Playgroud)

  • 只是要明确 - 是的,这样做是合法的.不,你不应该在你的代码中做到这一点,除非你想要一个狂热的精神病患者猛烈抨击你.并且通过狂热的精神病患者,我指的是下一个必须维护你的代码的开发人员. (4认同)

cod*_*ict 7

在您的代码中,只有最后一个;语句分隔符.其他的是替换运算符所采用的正则表达式分隔符.写这个的更好方法是:

$line =~s/[.,]$//;
Run Code Online (Sandbox Code Playgroud)

由于您的语句中必须包含语句分隔符和正则表达式分隔符,因此不能删除任何尾随 ;