当前位置: 首页 > 编程笔记 >

Perl双引号

路和悌
2023-03-14
本文向大家介绍Perl双引号,包括了Perl双引号的使用技巧和注意事项,需要的朋友参考一下

示例

与单引号字符串不同,双引号字符串使用插值转义。要双引号字符串,请使用双引号"或qq运算符。

my $greeting = "Hello!\n";
print $greeting;
# => Hello! (followed by a linefeed)

my $bush = "他们低估了我。"
print qq/As Bush once said: "$bush"\n/;
# => As Bush once said: "他们低估了我。" (with linefeed)

这qq在这里很有用,以避免必须转义引号。没有它,我们将不得不写...

print "As Bush once said: \"$bush\"\n";

...那不是很好。

Perl不限制你使用一个斜杠/用qq; 您可以使用任何(可见)字符。

use feature 'say';

say qq/You can use slashes.../;
say qq{...or braces...};
say qq^...or hats...^;
say qq|...or pipes...|;
# say qq ...but not whitespace. ;

您还可以将数组内插到字符串中。

use feature 'say';

my @letters = ('a', 'b', 'c');
say "I like these letters: @letters.";
# => I like these letters: a b c.

默认情况下,这些值以空格分隔–因为特殊变量$"默认为单个空格。当然,这可以更改。

use feature 'say';

my @letters = ('a', 'b', 'c');
{local $" = ", "; say "@letters"; }    # a, b, c

如果愿意,可以选择use English并更改$LIST_SEPARATOR:

use v5.18; # English should be avoided on older Perls
use English;

my @letters = ('a', 'b', 'c');
{ local $LIST_SEPARATOR = "\n"; say "我最喜欢的信件:\n\n@letters" }

对于任何比这更复杂的事情,您应该使用循环。

say "我最喜欢的信件:";
say;
for my $letter (@letters) {
  say " - $letter";
}

插值并没有与哈希工作。

use feature 'say';

my %hash = ('a', 'b', 'c', 'd');
say "This doesn't work: %hash"         # This doesn't work: %hash

有些代码滥用引用的内插法,请避免使用它

use feature 'say';

say "2 + 2 == @{[ 2 + 2 ]}";           # 2 + 2 = 4 (avoid this)
say "2 + 2 == ${\( 2 + 2 )}";          # 2 + 2 = 4 (avoid this)

所谓的“购物车操作符”使perl取消@{ ... }引用[ ... ]包含要内插的表达式的数组引用2 + 2。当您使用此技巧时,Perl会构建一个匿名数组,然后取消引用并丢弃它。

该${\( ... )}版本虽然不那么浪费,但仍然需要分配内存,并且更难读取。

相反,请考虑编写:

  • say "2 + 2 == " . 2 + 2;

  • my $result = 2 + 2; say "2 + 2 == $result"

 类似资料:
  • 主要内容:创建引用,取消引用,实例,实例,循环引用,实例,引用函数,实例引用就是指针,Perl 引用是一个标量类型可以指向变量、数组、哈希表(也叫关联数组)甚至子程序,可以应用在程序的任何地方。 创建引用 定义变量的时候,在变量名前面加个\,就得到了这个变量的一个引用,比如: 在数组中我们可以用匿名数组引用,使用 [] 定义: 匿名数组的元素仍然可以是匿名数组,所以我们可以用这种方法构造数组的数组,可以构造任意维度的数组。 在哈希中我们可以用匿名哈希引用,使用 {}

  • 引用就是指针,Perl 引用是一个标量类型可以指向变量、数组、哈希表(也叫关联数组)甚至子程序,可以应用在程序的任何地方。 创建引用 定义变量的时候,在变量名前面加个\,就得到了这个变量的一个引用,比如: $scalarref = \$foo; # 标量变量引用 $arrayref = \@ARGV; # 列表的引用 $hashref = \%ENV; # 哈希的引用

  • 问题内容: 手动编写HTML时,我总是使用单引号。我使用很多渲染的HTML,这些HTML总是使用双引号。这使我可以确定HTML是手工编写的还是生成的。这是一个好主意吗? 两者有什么区别?我知道它们都可以工作,并且得到所有现代浏览器的支持,但是在不同情况下,一个实际上比另一个更好吗? 问题答案: W3组织说: 默认情况下,SGML要求使用双引号(ASCII十进制34)或单引号(ASCII十进制39)

  • 问题内容: 这实际上有什么区别? 这工作正常: 但以下操作无效: 这是为什么? 问题答案: 那是因为双引号被认为是标准的,而单引号却没有。这并不是真正针对JQuery,而是关于JSON标准。因此,无论使用JS工具包,您都应该期待相同的行为。 值可以是带双引号的字符串,也可以是数字,也可以是true或false或null,或者是对象或数组。这些结构可以嵌套。

  • 问题内容: 我想使用程序包执行Windows命令,但是Windows进行了一些奇怪的转义。 我有类似的东西: “SomeText” 但这会引发错误,因为Windows会将其转换为 有人知道为什么吗?如何使用exec程序包在Windows上执行? 谢谢! 问题答案: OK,这是一个比较复杂一点比你预期,但有 是 一个解决方案: 不幸的是,尽管在2011年添加了对此功能的支持,但它似乎尚未纳入文档中。

  • 我是gradle的新手,目前只是试图遵循教程,有很多次我看到单引号和双引号混杂在一起。我只是想知道是否有一个不同的时间应该使用一套比另一个。这方面的一个例子是教程的第6.12节--默认任务: 所以,我只想知道我是否应该注意这些差异,或者它们是否可以相互改变,我可以使用单引号或双引号时打印字符串在Gradle。