Perl中的字符串是标量变量, 并且以($)符号开头, 并且可以包含字母, 数字和特殊字符。该字符串可以包含一个单词, 一组单词或多行段落。字符串由用户在单引号(')或双引号(")中定义。
带引号的字符串
在Perl中, 可以在双引号("")或单引号('')之间放置字符串。但是, 单引号中定义的字符串和双引号中定义的字符串将被区别对待。
双引号字符串:
内插双引号的字符串, 即变量名称(标量, 数组和哈希)被其原始值替换, 转义序列(如/ t,/n等)起作用。
也可以使用qq运算符代替双引号字符串。
单引号字符串:
单引号字符串不被插值。它们按原样解释, 没有任何修改。 Perl中的q运算符提供与单引号字符串相同的用法。
例子:
#!/usr/bin/perl
# An array of integers from 1 to 10
@list = (1..10);
# Non-interpolated string
$strng1 = 'Using Single quotes: @list' ;
# Interpolated string
$strng2 = "Using Double-quotes: @list" ;
print ( "$strng1\n$strng2" );
输出如下:
Using Single quotes: @list
Using Double-quotes: 1 2 3 4 5 6 7 8 9 10
字符串插值
使用双引号对字符串进行插值有时会变得棘手, 因为某些字符串包含的符号在插值时可能没有用。例如:写电子邮件地址时使用的" @"符号。如果要将电子邮件地址存储在双引号字符串中, 则会自动插入" at"(@)符号, 并将其视为数组名称的开头并由其替换。如果找到具有该名称的数组, 则它将用该数组的值替换该数组的名称;如果不存在具有该名称的数组, 则将其留为空白。
例子:
#!/usr/bin/perl
# Assining a variable with an email address
# using double-quotes
$email = "lsbin0402@gmail.com" ;
# Printing the interpolated string
print ( $email );
输出如下:
lsbin0402.com
在上面的示例中, 对字符串($ email)进行了插值, 并用名为'@gmail'的数组替换了@gmail, 但由于未找到具有该名称的数组, 因此删除了@gmail但未替换它, 因此, " lsbin0402.com "被打印出来。
在下面的示例中, @ gmail已预先定义, 因此将代替@gmail。
例子:
#!/usr/bin/perl
# Pre-defining the array
@gmail = (a..g);
# Assining a variable with an email
# address using double-quotes
$email = "lsbin0402@gmail.com" ;
# Printing the interpolated string
print ( $email );
输出如下:
lsbin0402a b c d e f g.com
可以通过使用单引号代替双引号来更正此问题。使用单引号将字符串分配给变量将删除插值, 因此" @"将不被视为数组声明。
例子:
#!/usr/bin/perl
# Assining a variable with an email address
# using single-quotes
$email = 'lsbin0402@gmail.com' ;
# Printing the non-interpolated string
print ( $email );
输出如下:
lsbin0402@gmail.com
以上对插值问题的解决方案具有缺点。如果需要在字符串中替换变量的值以及使用" @"符号怎么办?那么该方法将毫无用处, 因为单引号不允许替换变量的值。为了避免这种情况, 使用了转义字符, 即反斜杠(\)。反斜杠插入到" @"之前, 如下所示:
#!/usr/bin/perl
# Assining a variable with an email
# address using double-quotes
# Note: Using '\' to escape the
# interpolation of '@'
$email = "lsbin0402\@gmail.com" ;
# Printing the interpolated string
print ( $email );
# variable to be substituted
$name = "lsbin" ;
# variable to store the string
$email2 = "\n$name\@gmail.com" ;
# Printing the interpolated string
print ( $email2 );
输出如下:
lsbin0402@gmail.com
lsbin@gmail.com
转义转义字符
反斜杠是转义字符, 用于使用转义序列。当需要在插入的字符串中插入转义字符时, 将使用相同的反斜杠来转义转义字符替换为"(空白)。这允许在插值字符串中使用转义字符。
例子:
#!/usr/bin/perl
# Using Two escape characters to avoid
# the substitution of escape(\) with blank
$string1 = "Using the escape(\\) character" ;
# Printing the Interpolated string
print ( $string1 );
输出如下:
Using the escape(\) character
转义双引号
在字符串中使用双引号表示字符串的结尾, 因此不能直接插入。要在插值字符串中插入双引号, 请在双引号之前使用反斜杠以转义其插值。
例子:
#!/usr/bin/perl
# Escaping double-quotes with '\'
$string = "This page is \"Geeks For Geeks\"." ;
# Printing the interpolated string
print ( $string );
输出如下:
This page is "Geeks For Geeks".