我正在尝试使用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,因为该字符串包含单引号和双引号。有没有简单的方法来解决这个问题?
答案 0 :(得分:4)
最简单的方法可能是使用q
(相当于单引号)和qq
(相当于双引号)运算符:
my $str_with_quotes = qq(Hello "'world'"!);
my $cmd3 = qq(say q(c: $str_with_quotes));
请注意,使用q
/ qq
时,不转义字符串中的任何单/双引号。