Perl带引号,内插和转义的字符串使用介绍

2021年4月11日15:57:48 发表评论 1,835 次浏览

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".

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: