字符串

October 25, 2013 @ 01:34 PM

利用内插将字符串嵌入到另一个字符串中

双引号("")字符串能够内插其他变量。

  1. my $name = "Inigo Montoya";
  2. my $relative = "father";
  3. print "My name is $name, you killed my $relative";

非内插字符串

如果你不想要内插,那么使用单引号('')。

  1. print 'You may have won $1,000,000';

或者,你也可以转义特殊字符(印记)。

  1. print "You may have won \$1,000,000";

在字符串中使用 Email 地址要小心

此 Email 地址并不是你想要的:

  1. my $email = "andy@foo.com";
  2. print $email;
  3. # Prints "andy.com"

这里的问题是 @foo 作为数组被内插了。如果你打开了 use
warnings
,那么此类问题就很明显了:

  1. $ perl foo.pl
  2. Possible unintended interpolation of @foo in string at foo line 1.
  3. andy.com

解决办法是,要么使用非内插的引号:

  1. my $email = 'andy@foo.com';
  2. my $email = q{andy@foo.com};

要么转义 @

  1. my $email = "andy\@foo.com";

好的着色代码编辑器将帮助你防止此类问题。

使用 length() 获得字符串的长度

  1. my $str = "Chicago Perl Mongers";
  2. print length( $str ); # 20

使用 substr() 提取字符串

substr() 能够做各种字符串提取:

  1. my $x = "Chicago Perl Mongers";
  2. print substr( $x, 0, 4 ); # Chic
  3. print substr( $x, 13 ); # Mongers
  4. print substr( $x, -4 ); # gers

关于字符串 vs. 数字不必担心太多

不像其他语言,Perl 不知道字符串来自于数字。它将做最好的 DTRT。

  1. my $phone = "312-588-2300";
  2. my $exchange = substr( $phone, 4, 3 ); # 588
  3. print sqrt( $exchange ); # 24.2487113059643

利用 ++ 操作符自增非数字字符串

你能够利用 ++ 来自增字符串。字符串abc自增后变成abd

  1. $ cat foo.pl
  2. $a = 'abc'; $a = $a + 1;
  3. $b = 'abc'; $b += 1;
  4. $c = 'abc'; $c++;
  5. print join ", ", ( $a, $b, $c );
  6. $ perl -l foo.pl
  7. 1, 1, abd

注意:你必须使用 ++ 操作符。在上述示例中,字符串abc被转换成0,然后再自增。

利用 heredocs 创建长字符串

Heredocs 允许连续文本,直到遇到下一个标记。使用内插,除非标记在单引号内。

  1. my $page = <<HERE;
  2. <html>
  3. <head><title>$title</title></head>
  4. <body>This is a page.</body>
  5. </html>
  6. HERE