在Perl中引用几乎任何类型的奇怪字符串都很简单。
my $url = q{http://my.url.com/any/arbitrary/path/in/the/url.html};
实际上,Perl中的各种报价机制都非常有趣。类似Perl正则表达式的报价机制允许您报价任何内容,并指定分隔符。您几乎可以使用任何特殊字符(例如#,/)或打开/关闭字符(例如(),[]或{})。例子:
my $var = q#some string where the pound is the final escape.#;
my $var2 = q{A more pleasant way of escaping.};
my $var3 = q(Others prefer parens as the quote mechanism.);
报价机制:
q:文字引用;唯一需要转义的字符是结束字符。qq:解释的报价;处理变量和转义字符。非常适合您需要引用的字符串:
my $var4 = qq{This "$mechanism" is broken. Please inform "$user" at "$email" about it.};
qx:与qq相似,但是作为系统命令非交互地执行。返回从标准输出生成的所有文本。(如果操作系统支持,也可以进行重定向)也可以使用反引号(`字符)。
my $output = qx{type "$path"}; # get just the output
my $moreout = qx{type "$path" 2>&1}; # get stuff on stderr too
qr:像qq一样解释,但随后将其编译为正则表达式。也可以在正则表达式上使用各种选项。您现在可以将正则表达式作为变量传递:
sub MyRegexCheck {
my ($string, $regex) = @_;
if ($string)
{
return ($string =~ $regex);
}
return; # returns 'null' or 'empty' in every context
}
my $regex = qr{http://[\w]\.com/([\w]+/)+};
@results = MyRegexCheck(q{http://myurl.com/subpath1/subpath2/}, $regex);
qw:一个非常非常有用的引用运算符。将带引号的一组用空格分隔的单词转换为列表。非常适合在单元测试中填写数据。
my @allowed = qw(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z { });
my @badwords = qw(WORD1 word2 word3 word4);
my @numbers = qw(one two three four 5 six seven); # works with numbers too
my @list = ('string with space', qw(eight nine), "a $var"); # works in other lists
my $arrayref = [ qw(and it works in arrays too) ];
只要事情变得更清晰,它们就很好用。对于qx,qq和q,我很可能使用{}运算符。使用qw的人最常见的习惯通常是()运算符,但有时您还会看到qw //。