Perl 从模块导入数据

Perl 从模块导入数据,perl,perl-module,Perl,Perl Module,我已经给出了一个文件testconf.pm,其中除了 my $item = { 'default' => { 'General' => { 'item1' => 'config1', 'item2' => 'config2' } } }; 在第二个文件main.p

我已经给出了一个文件testconf.pm,其中除了

my $item = {

'default'   =>     {

    'General'       =>    { 'item1' => 'config1',
                            'item2' => 'config2'
                          }
                   }
           };
在第二个文件main.pl中,我想加载哈希以进行下一个处理步骤, 我试过一些东西,比如

use testconfig;
use Data::Dumper;
my $config;
$config = testconfig::item;
print Dumper $config;

但是我无法使用testconf中的数据。不幸的是,我不能用导出器或packagedeclaration扩展testconf.pm,使用我们的instea of my等等,因为这个文件必须保持这样。如何从main.pl btw中的item中获取值。我需要访问数据,不仅要转储数据

如果文件的结构不允许do工作,您可以读取文件,进行任何必要的更改并评估:


如果文件的结构不允许do工作,您可以读取该文件,进行任何必要的更改并评估:


您特别告诉Perl将变量的作用域限制在文件中可以看到的位置,因此您不能

如果这是整个文件,您可以通过更改

do("testconf.pm")
   or die($@ || $!);


您特别告诉Perl将变量的作用域限制在文件中可以看到的位置,因此您不能

如果这是整个文件,您可以通过更改

do("testconf.pm")
   or die($@ || $!);



没有说这有意义,但OP确实说我无法使用我的instea等使用exporter或packagedeclaration扩展testconf.pm,因为这个文件必须保持这样。正如我所说的,我不能在testconfig.pm中更改任何内容。这件衣服是黑色的不是,是的,我知道如果我可以改变任何东西,它会更容易,但我不知何故不得不接受这个文件。本,这是我的错别字,更正了逗号,这让我更接近了一步,但我不得不用它作为散列。对于您的hack,我不能将其用作hashref,因为它在文件中作为hashref读入,您可以简单地将其作为%$config-或直接引用,例如$config->{default}您的代码确实是一个hack,因为它是do的重新实现。除此之外,这不是黑客行为,因为他应该使用do而不是use/require!没有说这有意义,但OP确实说我无法使用我的instea等使用exporter或packagedeclaration扩展testconf.pm,因为这个文件必须保持这样。正如我所说的,我不能在testconfig.pm中更改任何内容。这件衣服是黑色的不是,是的,我知道如果我可以改变任何东西,它会更容易,但我不知何故不得不接受这个文件。本,这是我的错别字,更正了逗号,这让我更接近了一步,但我不得不用它作为散列。对于您的hack,我不能将其用作hashref,因为它在文件中作为hashref读入,您可以简单地将其作为%$config-或直接引用,例如$config->{default}您的代码确实是一个hack,因为它是do的重新实现。除此之外,这不是黑客行为,因为他应该使用do而不是use/require!打字错误,已经改正了。感谢幸运的是,我不能使用导出器或packagedeclaration扩展testconf.pm,使用我们的instea of my等等,因为这个文件必须保持这样。你在做什么样的项目,阻止你解决这样的基本架构问题?基本上,其他人会建立一个巨大的程序,这是这个程序的一个配置文件,我只是一个小人物,必须使用这个文件,不能更改它以不杀死旧的大型程序。我的建议:在待办事项上贴一张罚单来修复这个怪物,然后开始寻找更好的工作:-好吧,我的工作中其他一切都很好,我想我可以接受;打字错误,已经改正了。感谢幸运的是,我不能使用导出器或packagedeclaration扩展testconf.pm,使用我们的instea of my等等,因为这个文件必须保持这样。你在做什么样的项目,阻止你解决这样的基本架构问题?基本上,其他人会建立一个巨大的程序,这是这个程序的一个配置文件,我只是一个小人物,必须使用这个文件,不能更改它以不杀死旧的大型程序。我的建议:在待办事项上贴一张罚单来修复这个怪物,然后开始寻找更好的工作:-好吧,我的工作中其他一切都很好,我想我可以接受;嗯,不是我指定的。这个文件是给我的,不知怎么他们也读了。但是我不知道如何使用.PS-为非Perl模块的文件提供.pm扩展名是不合适的。好吧,我不完全确定谁应该给正确的答案,因为你们都给予了极大的支持。Ben Grimm关于解除引用和第一次帮助,让您以更优雅的方式。那么谁给这个分数呢?ikegami,我知道你的意思……但代码的这一面不在我手中,所以我必须接受所给予的。有不止一种方法可以做到这一点,但这个答案是正确的。但我也感谢你!嗯,不是
我知道是谁指定的。这个文件是给我的,不知怎么他们也读了。但是我不知道如何使用.PS-为非Perl模块的文件提供.pm扩展名是不合适的。好吧,我不完全确定谁应该给正确的答案,因为你们都给予了极大的支持。Ben Grimm关于解除引用和第一次帮助,让您以更优雅的方式。那么谁给这个分数呢?ikegami,我知道你的意思……但代码的这一面不在我手中,所以我必须接受所给予的。有不止一种方法可以做到这一点,但这个答案是正确的。但我也感谢你!
my $item = do("testconf.pm")
   or die($@ || $!);