在Perl中,如何只替换字符串的第一个字符?

Cep*_*pod 5 string perl

我不知道一点点Perl并且必须修复Perl脚本中的错误.

给定$myvar包含字符串的变量,如果第一个字符是点,则将其替换为"foo/bar".

我怎样才能做到这一点?
(如果你能猜到这个bug,可以获得奖励积分)

Ben*_*oit 9

$myvar =~ s+^\.+foo/bar+ ;
Run Code Online (Sandbox Code Playgroud)

  • +是替代正则表达式引号字符,因为正常的"/"与"foo/bar"冲突.你可以选择你想要的东西,我个人觉得括号更具可读性:s {^ \.} {foo/bar}. (4认同)
  • 因为加号是正则表达式语法的一部分,所以它似乎是一个糟糕的选择.`\.+`的存在似乎表明正则表达式取代了所有的点,即使它没有. (3认同)
  • 只有字符串最开头的一个(这就是^所做的) (2认同)

Eug*_*ash 8

你可以使用substr:

 substr($myvar, 0, 1, "foo/bar") if "." eq substr($myvar, 0, 1);
Run Code Online (Sandbox Code Playgroud)


小智 5

一些substr魔力:

$_ eq '.' and $_ = "foo/bar" for substr $myvar, 0, 1;
Run Code Online (Sandbox Code Playgroud)

而这种语法让我爱上了perl 5.12

for(substr($myvar, 0, 1)) {
    when('.') { $_ = "foo/bar" }
}
Run Code Online (Sandbox Code Playgroud)

  • 或者,Perl的所有错误的例子.'For'用于循环.如果为了使用其他一些好东西你需要使用'for',即使你没有循环,那么语言也会被打破. (3认同)
  • 虽然是Perl-lover的交易和倾向,但我必须同意@Colin.`for`用于循环.把它变成这样的东西,而不是使用`if`(就像eugene y所做的那样)似乎只是混淆,纯粹是因为太聪明了一半. (2认同)