String 用Perl打印字符串
有没有一种简单的方法,可以使用一个子例程,在Perl中打印字符串而不转义每个特殊字符 这就是我想做的:String 用Perl打印字符串,string,perl,escaping,character,String,Perl,Escaping,Character,有没有一种简单的方法,可以使用一个子例程,在Perl中打印字符串而不转义每个特殊字符 这就是我想做的: print DELIMITER <I don't care what is here> DELIMITER 打印分隔符 如果您指的是带有“特殊字符”的引号和撇号,则打印操作不会对转义进行特殊处理,而是使用双引号字符串。您可能希望尝试使用单引号字符串: print 'this is \n', "\n"; 在单引号字符串中,唯一必须转义的字符是单引号和紧跟在字符串末尾之前的反斜
print DELIMITER <I don't care what is here> DELIMITER
打印分隔符
如果您指的是带有“特殊字符”的引号和撇号,则打印操作不会对转义进行特殊处理,而是使用双引号字符串。您可能希望尝试使用单引号字符串:
print 'this is \n', "\n";
在单引号字符串中,唯一必须转义的字符是单引号和紧跟在字符串末尾之前的反斜杠(即'foo\\\'
)
需要注意的是,插值不适用于单引号字符串,因此
print 'foo is $foo', "\n";
如果您希望按字面方式打印字符串,并且使用Perl 5.10或更高版本,则不会打印$foo
的内容
say 'This is a string with "quotes"' ;
将使用换行符打印字符串。。重要的是使用单引号而不是双引号。在“引号和类似引号的运算符”下,包含您需要的所有内容
虽然我们通常将引号视为文字值,但在Perl中它们充当运算符,提供各种插值和模式匹配
能力。Perl为这些行为提供了习惯的引号字符,但也提供了一种方法,让您可以为任何行为选择引号字符
他们。在下表中,{}表示您选择的任何一对分隔符
Customary Generic Meaning Interpolates
'' q{} Literal no
"" qq{} Literal yes
`` qx{} Command yes*
qw{} Word list no
// m{} Pattern match yes*
qr{} Pattern yes*
s{}{} Substitution yes*
tr{}{} Transliteration no (but see below)
<<EOF here-doc yes*
* unless the delimiter is ''.
习惯通用含义插入
''q{}文字编号
”“是的
``qx{}命令是*
qw{}单词列表编号
//m{}模式匹配是*
qr{}模式是*
s{}{}{}替换是*
tr{}{}音译no(但见下文)
您可以使用\uuuu DATA\uuuu
指令,该指令将以下所有行视为可从数据
句柄访问的文件:
while (<DATA>) {
print # or do something else with the lines
}
__DATA__
#!/usr/bin/perl -w
use Some::Module;
....
while(){
打印#或对这些行执行其他操作
}
__资料__
#!/usr/bin/perl-w
使用一些::模块;
....
或者,您也可以使用heredoc:
my $string = <<'END'; #single quotes prevent any interpolation
#!/usr/bin/perl -b
use Some::Module;
....
END
my$string=你几乎可以在q
或qq
中使用你想要的任何字符。例如:
#!/usr/bin/perl
use utf8;
use strict; use warnings;
print q∞This is a test∞;
print qq☼\nThis is another test\n☼;
print q»But, what is the point?»;
print qq\nYou are just making life hard on yourself!\n;
print qq¿That last one is tricky\n¿;
您不能使用qq分隔符foo分隔符
。但是,您可以使用heredocs获得类似的效果:
print <<DELIMITER
...
DELIMETER
;
print你能给出一些你觉得很难打印的字符串的例子吗?里面有很多单引号。想法是打印字符串的内容,而不管里面是什么。用于打印的子例程,可在其中指定字符串分隔符。@这将是q/
和qq/
通用字符串运算符。您可以指定分隔符,因此可以说my$s=qq(包含“and”);
有两种类型的分隔符:括号分隔符和非括号分隔符。括号分隔符是()
,[]
,{}
和
。第一个字符启动字符串,第二个字符关闭字符串,并警告允许嵌套(因此qq(他说“嘿(那是我的帕伦)”;
是有效字符串)。第二次看到时,无括号分隔符关闭字符串(例如qq/foo/;
)。这个问题仍然没有意义。请显示已断开的代码。我可以使用字符串作为分隔符吗?假设qq分隔符foo DELIMITERI有一个保证的解决方案:代码点U+FFFE和F+FFFF(以及其他)保证对交换是非法的,但您可以在内部使用它们。这还包括代码点>0x10\u FFFF,如\x{DEADBEEF}
。我以为你应该把分号放在行上,你可以用说来做这件事,但你需要使用功能“say”
或指定一个最低版本,如使用5.10.0
来做这件事,或者你可以用-E而不是-E作为一行。请参阅perldoc功能
。
print <<DELIMITER
...
DELIMETER
;
print <<'DELIMETER'
...
DELIMETER
;