Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取在Perl子例程中硬编码的值?_Perl - Fatal编程技术网

如何获取在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 => {

我有这样一个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 => {
            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'};