已关闭。此问题需要details or clarity。目前不接受回答。
**要改进此问题吗?**通过editing this post添加详细信息并阐明问题。
11小时前关闭
截至3小时前,社区正在审查是否重新讨论这个问题。
Improve this question的
这是完美的工作:
my %hash1 = ( 'key1', 54812);
print ${hash1}{'key1'}; # prints 54812
字符串
当涉及到这一点:
my %parameters = ( 'ReferenceCode', 00000 );
my $string = q\$parameters{'ReferenceCode'}\; # here i simulate that i read it from .txt file
$string =~ s/\$(\w+)\{'(\w+)'\}/${$1}{'$2'}/g;
型
当我试图用正则表达式插入字符串时,它给出了这个错误:
Use of uninitialized value in concatenation (.) or string at....
型
基本上,编译器认为它是空的,但它不是。
我该怎么办?
2条答案
按热度按时间3htmauhk1#
符号引用(使用变量名作为引用)只适用于包变量。而且这是一个非常糟糕的主意,这就是为什么我们总是使用
use strict;
来防止我们自己使用它们(以及其他一些原因)。一个解决方案:
字符串
请注意,您的模板系统没有任何形式的转义,这是有问题的。您是否考虑过使用现有的模板系统,而不是重新发明轮子?
型
pxiryf3j2#
使用
e
或ee
标志,如下所示。但是要注意使用
eval
是不安全的。考虑只传递用户输入的键,而不是整个perl变量(或任何代码):字符串
这些标志用于:
/e
:将REPLACEMENT
作为s/PATTERN/REPLACEMENT/
中的表达式求值/ee
:将REPLACEMENT
作为字符串求值,然后将结果eval
。