如何获取在Perl子例程中硬编码的值?
我有这样一个perl代码:如何获取在Perl子例程中硬编码的值?,perl,Perl,我有这样一个perl代码: use constant OPERATING_MODE_MAIN_ADMIN => 'super_admin'; use constant OPERATING_MODE_ADMIN => 'admin'; use constant OPERATING_MODE_USER => 'user'; sub system_details { return { operating_modes => {
use constant OPERATING_MODE_MAIN_ADMIN => 'super_admin';
use constant OPERATING_MODE_ADMIN => 'admin';
use constant OPERATING_MODE_USER => 'user';
sub system_details
{
return {
operating_modes => {
values => [OPERATING_MODE_MAIN_ADMIN, OPERATING_MODE_ADMIN, OPERATING_MODE_USER],
help => {
'super_admin' => 'The system displays the settings for super admin',
'admin' => 'The system displays settings for normal admin',
'user' => 'No settings are displayed. Only user level pages.'
}
},
log_level => {
values => [qw(FATAL ERROR WARN INFO DEBUG TRACE)],
help => "http://search.cpan.org/~mschilli/Log-Log4perl-1.49/lib/Log/Log4perl.pm#Log_Levels"
},
};
}
如何从另一个子例程访问每个键的“值”字段和“帮助”字段?假设我只需要操作模式或日志级别的值?系统详细信息()返回一个hashref,其中有两个键的值为hashrefs。因此,您可以取消对sub的返回的引用,并将其分配到哈希中,然后提取您需要的内容
my %sys = %{ system_details() };
my @loglevel_vals = @{ $sys{log_level}->{values} };
my $help_msg = $sys{log_level}->{help};
@loglevel\u vals
数组包含FATAL
、ERROR
等,而$help\u msg
包含消息字符串
这会生成一个额外的散列副本,同时可以使用引用,如中所示
但是,由于其目的是在另一个子系统中查询数据,因此使用本地副本也是有意义的,这通常更安全(防止意外更改调用方中的数据)
有一些模块通过显示来帮助破译复杂的数据结构。这有助于设计处理数据的方法。经常引用的是,这也不仅仅是显示数据。其他一些仅用于显示数据。有两个不错的是and。系统_details()返回一个hashref,它有两个值为hashrefs的键。因此,您可以取消对sub的返回的引用,并将其分配到哈希中,然后提取您需要的内容
my %sys = %{ system_details() };
my @loglevel_vals = @{ $sys{log_level}->{values} };
my $help_msg = $sys{log_level}->{help};
@loglevel\u vals
数组包含FATAL
、ERROR
等,而$help\u msg
包含消息字符串
这会生成一个额外的散列副本,同时可以使用引用,如中所示
但是,由于其目的是在另一个子系统中查询数据,因此使用本地副本也是有意义的,这通常更安全(防止意外更改调用方中的数据)
有一些模块通过显示来帮助破译复杂的数据结构。这有助于设计处理数据的方法。经常引用的是,这也不仅仅是显示数据。其他一些仅用于显示数据。一些不错的是和
如果需要反省帮助中存储的结构类型(例如help
在operating\u mode
中是散列,但在log\u level
中是字符串),请使用内置函数
如果需要反省“帮助”中存储的结构类型(例如,
operating\u mode
中的help
是一个散列,但在log\u level
中它是一个字符串),请使用内置函数。您的意思是在调用sub时如何访问它们并获取返回的内容?标题不清楚,是的。这就是问题所在。那么你想要什么“价值观”?您的log\u级别
hashref一个键有一个arrayref“value”,另一个键有一个字符串。我需要同时访问这两个键。我需要获取操作模式和日志级别的值和帮助键。你是说当你调用sub并获取它返回的内容时,如何访问它们?标题不清楚,是的。这就是问题所在。那么你想要什么“价值观”?您的log\u级别
hashref一个键有一个arrayref“value”,另一个键有一个字符串。我需要同时访问这两个键。我需要获取操作模式和日志级别的值和帮助键谢谢@zdim。我了解数据转储程序并经常使用它。这里我的目标是将这些值返回到另一个子例程,以验证从php前端输入的值。@Phoenix啊,好的。然后相应地编写sub——它的返回是一个标量(hashref),很容易传递。然后在另一个子系统中,您可以取消引用,等等。是的:)感谢您的快速响应和帮助。为什么要复制哈希(my%sys=%{system_details()};
),而不只是使用referefence?@ikegami没有特殊原因(除了一开始我不确定想要什么,因为标题)。但事实证明这是合理的,因为这样做的目的是在另一个分,检查;那么一般来说,本地拷贝比较安全。谢谢@zdim。我了解数据转储程序并经常使用它。这里我的目标是将这些值返回到另一个子例程,以验证从php前端输入的值。@Phoenix啊,好的。然后相应地编写sub——它的返回是一个标量(hashref),很容易传递。然后在另一个子系统中,您可以取消引用,等等。是的:)感谢您的快速响应和帮助。为什么要复制哈希(my%sys=%{system_details()};
),而不只是使用referefence?@ikegami没有特殊原因(除了一开始我不确定想要什么,因为标题)。但事实证明这是合理的,因为这样做的目的是在另一个分,检查;那么一般来说,本地副本比较安全。谢谢你的回答。谢谢你的回答。
my $sys = system_details;
my $log_level = $sys->{'log_level'};
my @values = @{ $log_level->{'values'} };
my $help = $log_level->{'help'};