How can I get one Perl script to see variables in another Perl script?

匿名 (未验证) 提交于 2019-12-03 03:06:01

问题:

I have a Perl script that is getting big, so I want to break it out into multiple scripts. namely, I want to take out some large hash declarations and put them into another file. How do I get the original script to be able to see and use the variables that are now being declared in the other script?

This is driving me nuts because I haven't used Perl in a while and for the life of me can't figure this out

回答1:

Use a module:

package Literature;  our %Sidekick = (   Batman => "Robin",   Bert   => "Ernie",   Don    => "Sancho", );  1;

For example:

#! /usr/bin/perl  use Literature;  foreach my $name (keys %Literature::Sidekick) {   print "$name => $Literature::Sidekick{$name}\n"; }

Output:

$ ./prog  Bert => Ernie Batman => Robin Don => Sancho


回答2:

You use modules. Or modulinos.

Make it a module that exports (optionally!) some variables or functions. Look up how to use the Exporter module.



回答3:

Yet another suggestion to use a module.

Modules are not hard to write or use. They just seem hard until you write one. After the first time, it will be easy. Many, many good things come from using modules--encapsulation, ease of testing, and easy code reuse to name a few.

See my answer to a similar question for an example module, with exported functions.

Also, some very smart people in the Perl community like modules so much that they advocate writing apps as modules--they call them modulinos. The technique works well.

So, in conclusion, try writing a module today!



回答4:

As an addition to the other "use a module" suggestions, if you plan on reusing the module a lot, you will want to get this installed into either your site library (usually under ...(perl install folder)...\site\lib.

If not (perhaps, it has limited reusability outside the script), you can keep it in the directory with your script and import it like so:

use lib './lib'; # where ./lib is replaced with wherever the module actually is. use MyModule;


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!