使用eval在Perl中打印带引号的字符串

时间:2015-03-04 07:11:15

标签: perl

我正在尝试使用eval来打印包含引号的字符串。例如:

use feature qw(say);
use strict;
use warnings;

my $str_with_double_quotes = 'Hello "world"!';
my $str_with_single_quotes = "Hello 'world'!";
my $str_with_quotes = "Hello \"'world'\"!";

say "1. $str_with_double_quotes";
say "2. $str_with_single_quotes";
say "3. $str_with_quotes";

my $cmd1 = "say 'a: $str_with_double_quotes'";
my $cmd2 = "say \"b: $str_with_single_quotes\"";
my $cmd3 = "say 'c: $str_with_quotes'";

eval($cmd1);
eval($cmd2);
eval($cmd3);

这适用于案例1和案例2,但不适用于案例3,因为该字符串包含单引号和双引号。有没有简单的方法来解决这个问题?

1 个答案:

答案 0 :(得分:4)

最简单的方法可能是使用q(相当于单引号)和qq(相当于双引号)运算符:

my $str_with_quotes = qq(Hello "'world'"!);
my $cmd3 = qq(say q(c: $str_with_quotes));

请注意,使用q / qq时,转义字符串中的任何单/双引号。