我需要动态地包含一个Perl模块,但是如果可能的话,由于工作编码标准,我希望远离eval.这有效:
$module = "My::module";
eval("use $module;");
Run Code Online (Sandbox Code Playgroud)
但是eval如果可能的话,我需要一种方法来做到这一点.所有谷歌搜索都会导致该eval方法,但没有任何其他方式.
没有可能eval吗?
是否可以在C中连接变量名?具体来说,我有一个struct包含6个类似的变量在叫class1,class2,class3,等.
我想通过for循环来为每个变量分配一个值,但是如果没有以某种方式将变量名与for循环计数器的值连接起来,我看不出怎么做.
我怎么能这样做?
在Perl中,是否可以基于字符串创建全局变量?
例如,如果我有一个像这样的功能:
sub create_glob_var {
my ($glob_var_str) = @_;
# something like this ( but not a hash access).
our ${$glob_var_str};
};
Run Code Online (Sandbox Code Playgroud)
我称之为:
create_glob_var( "bar" );
Run Code Online (Sandbox Code Playgroud)
我如何修改create_glob_var以实际创建一个名为的全局变量$bar?
我的项目使用的是perl 5.8.5.
编辑
以下不起作用:
use strict;
BEGIN {
sub create_glob_var {
my ($glob_var_str) = @_;
no strict 'refs';
$$glob_var_str = undef; # or whatever you want to set it to
}
create_glob_var("bah");
};
$bah = "blah";
Run Code Online (Sandbox Code Playgroud)
生产:
Variable "$bah" is not imported at /nfs/pdx/home/rbroger1/tmp2.pl line 12. Global symbol "$bah" …
可能重复:
如何在Perl中将变量用作变量名?
这可行吗?我需要将字符串更改为变量.
例:
如果我有这样的变量:
$this_is_test = "what ever";
$default = "this";
$default = $default . "_is_test";
Run Code Online (Sandbox Code Playgroud)
我想要$default的价值$this_is_test.
基本上,我想获取动态生成的字符串中命名的变量的内容,但是在严格模式下完成此操作的所有努力都失败了.有几个关于类似问题的帖子,但似乎没有一个解决方案对我有用.
这就是我想要做的:
# Fields:
$q1 = "ex. data 1";
$q2 = "ex. data 2";
$q3 = "ex. data 3";
$q4 = "ex. data 4";
$q5 = "ex. data 5";
# retrieve the desired field name. q1, q2, q3, q4, or q5.
$field_name = fetch_the_desired_field_name();
# fetch the contents of the named field. ex. data 1, ex. data 2, etc.
$contents_of_desired_field = $$field_name;
print $contents_of_desired_field;
Run Code Online (Sandbox Code Playgroud)
有没有办法在严格模式下执行此操作?在关于类似问题的其他帖子中,人们说哈希是答案,但我似乎无法完全掌握如何使用哈希来做到这一点.不言而喻,这是一个非常简单的例子.在实际代码中,有115个可能的字段名称,都是从数据库中提取的,具有不可预测的内容.
如何将字符串转换为变量(字符串变量 - > $ variable)?
或者用逗号分隔的变量列表然后转换为实际变量.
我有2个文件:
我需要根据字符串匹配rows文件中的整行,并根据列名文件命名每一行.
例:
name,age,gender
Run Code Online (Sandbox Code Playgroud)
mar,44,m
rich,49,m
glenn,22,m
Run Code Online (Sandbox Code Playgroud)
现在我有一个变量字符串 $who = 'glenn'
我将首先在ROWS FILE上匹配它.
然后我需要将其匹配的内容命名为一个实际变量,其名称基于COLUMN NAMES FILE.
输出:
$name = 'glenn';
$age = 22;
$gender = 'm';
Run Code Online (Sandbox Code Playgroud)
我需要动态更改的东西,只需更新内容文件即可自动创建所需的变量和内容.
对于所有这些愚蠢的问题感到抱歉,我已经进入了Perl编程,我发现很难像Perl程序员一样思考.
今天愚蠢的问题:我使用id字段作为键将管道分隔文件加载到哈希中,就像这样
#open file
my %hash;
while (<MY_FILE>) {
chomp;
my ($id, $path, $date) = split /\|/;
$hash{$id} = {
"path" => $path,
"date" => $date
};
}
Run Code Online (Sandbox Code Playgroud)
然而,有几次,当我真正需要键作为路径时,因为无论出于何种原因(并且不能,它无法更改),id不是唯一的,所以我有一个明智的想法,我可以把把它全部放到子程序中并传递变量的名称作为它的关键,有点像:
load_hash("path");
sub load_hash {
my $key = shift;
#do stuff, and then in while loop
$hash{${$key}} = #and so on
}
Run Code Online (Sandbox Code Playgroud)
但是在perldb中,x $ {$ key}始终为undef,尽管x $ {path}会在$ path中打印该值.
有没有办法做我想做的事情?
TIA
如果我有一个变量,$bar它等于字符串"foo"并且$foo等于0xdead,那么$foo当我只有变量名的字符串时,如何得到值?
本质上,我想在全局命名空间上执行一种指针间接寻址或在全局命名空间上执行哈希查找.
以下不起作用:
perl -e 'my $foo=0xdead; my $bar ="foo"; print ${$bar}."\n";'
Run Code Online (Sandbox Code Playgroud)
它只打印换行符.
我想在Perl中创建一个数组,其中包含两个变量的值,并且两个变量中的一个将具有从文件中读取的值.
在简化的情况下,我怎么能创建一个名称的数组CCP时,P和CC是两个独立的变量?
到目前为止,我已加入两个使用:
my $body='CC';
my $letter='P';
my $joined=$body . "$venue";
Run Code Online (Sandbox Code Playgroud)
但我想实际创建一个名字的数组@CCP.我的想法是,我将从数据文件中读取不同的字母,然后通过将"CC"连接到从文件读取的字母来创建将具有名称的数组.
嗨,我读过一些相关的问题似乎没有帮助我.这是一个可以解释我想要的代码.
for ($i=0;$i<5;$i++) {
my $new$i=$i;
print "\$new$i is $new$i";
}
Run Code Online (Sandbox Code Playgroud)
期待变量被命名为$new0,$new1,$new2,$new3,$new4,$new5.并且像打印命令一样在循环中使用它们是非常有用的.谢谢