📜  珀尔 |引用、插值和转义字符串

📅  最后修改于: 2022-05-13 01:55:50.330000             🧑  作者: Mango

珀尔 |引用、插值和转义字符串

Perl 中的字符串是一个标量变量,以 ($) 符号开头,它可以包含字母、数字、特殊字符。字符串可以由单个单词、一组单词或多行段落组成。字符串由用户在单引号 (') 或双引号 (") 内定义。

带引号的字符串


在 Perl 中,字符串可以放在双引号 (" ") 或单引号 (' ') 之间。但是,在单引号中定义的字符串和在双引号中定义的字符串的处理方式不同。
双引号字符串:
双引号字符串被插值,即变量名(标量、数组和散列)被它们的原始值替换,转义序列(如/t、/n 等)完成它们的工作。
qq运算符也可以用来代替双引号字符串。
单引号字符串:
不插入单引号字符串。它们按原样解释,没有任何修改。 Perl 中的 q运算符提供与单引号字符串相同的用途。
例子:

Perl
#!/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");


Perl
#!/usr/bin/perl
 
# Assigning a variable with an email address
# using double-quotes
$email = "GeeksforGeeks0402@gmail.com";
 
# Printing the interpolated string
print($email);


Perl
#!/usr/bin/perl
 
# Pre-defining the array
@gmail = (a..g);
 
# Assigning a variable with an email
# address using double-quotes
$email = "GeeksforGeeks0402@gmail.com";
 
# Printing the interpolated string
print($email);


Perl
#!/usr/bin/perl
 
# Assigning a variable with an email address
# using single-quotes
$email = 'GeeksforGeeks0402@gmail.com';
 
# Printing the non-interpolated string
print($email);


Perl
#!/usr/bin/perl
 
# Assigning a variable with an email
# address using double-quotes
# Note: Using '\' to escape the
# interpolation of '@'
$email = "GeeksforGeeks0402\@gmail.com";
 
# Printing the interpolated string
print($email);
 
# variable to be substituted
$name = "GeeksforGeeks";
 
# variable to store the string
$email2 = "\n$name\@gmail.com";
 
# Printing the interpolated string
print($email2);


Perl
#!/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);


Perl
#!/usr/bin/perl
 
# Escaping double-quotes with '\'
$string = "This page is \"Geeks For Geeks\".";
 
# Printing the interpolated string
print($string);


输出:
Using Single quotes: @list 
Using Double-quotes: 1 2 3 4 5 6 7 8 9 10


字符串插值


使用双引号对字符串进行插值有时会变得很棘手,因为某些字符串包含在插值时可能无用的符号。例如:用于书写电子邮件地址的“@”符号。当电子邮件地址要存储在双引号字符串中时,'at' (@) 符号会自动插入,并被视为数组名称的开头并由它替换。如果找到具有该名称的数组,则它将用数组值替换数组名称,或者如果具有该名称的数组不存在,它将留空。
例子:

Perl

#!/usr/bin/perl
 
# Assigning a variable with an email address
# using double-quotes
$email = "GeeksforGeeks0402@gmail.com";
 
# Printing the interpolated string
print($email);
输出:
GeeksforGeeks0402.com

在上面的示例中,字符串($email) 被插值,@gmail 被一个名为“@gmail”的数组替换,但由于没有找到具有该名称的数组,@gmail 被删除但未被替换,因此“GeeksforGeeks0402.com ”被打印出来。
在下面的示例中,@gmail 已预先定义,因此被替换为 @gmail。
例子:

Perl

#!/usr/bin/perl
 
# Pre-defining the array
@gmail = (a..g);
 
# Assigning a variable with an email
# address using double-quotes
$email = "GeeksforGeeks0402@gmail.com";
 
# Printing the interpolated string
print($email);
输出:
GeeksforGeeks0402a b c d e f g.com

这可以通过使用单引号代替双引号来纠正。使用单引号将字符串分配给变量将删除插值,因此“@”不会被视为数组声明。
例子:

Perl

#!/usr/bin/perl
 
# Assigning a variable with an email address
# using single-quotes
$email = 'GeeksforGeeks0402@gmail.com';
 
# Printing the non-interpolated string
print($email);
输出:
GeeksforGeeks0402@gmail.com

上述插值问题的解决方案包含一个缺点。如果需要在字符串中替换变量的值以及使用“@”符号怎么办。那么这个方法就没有用了,因为单引号不允许替换变量的值。为了克服这种情况,使用了转义字符,即反斜杠(\)。反斜杠插入到 '@' 之前,如下所示:

Perl

#!/usr/bin/perl
 
# Assigning a variable with an email
# address using double-quotes
# Note: Using '\' to escape the
# interpolation of '@'
$email = "GeeksforGeeks0402\@gmail.com";
 
# Printing the interpolated string
print($email);
 
# variable to be substituted
$name = "GeeksforGeeks";
 
# variable to store the string
$email2 = "\n$name\@gmail.com";
 
# Printing the interpolated string
print($email2);
输出:
GeeksforGeeks0402@gmail.com
GeeksforGeeks@gmail.com


转义转义字符


反斜杠是转义字符,用于使用转义序列。当需要在插值字符串中插入转义字符时,使用相同的反斜杠来转义用“(空白)替换转义字符。这允许在插值字符串中使用转义字符。
例子:

Perl

#!/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


转义双引号


在字符串的结尾,因此不能直接插入。要在插值字符串中插入双引号,请在双引号之前使用反斜杠以转义其插值。
例子:

Perl

#!/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".