gpt4 book ai didi

Perl - 所有包含的脚本和模块中都可用的全局变量?

转载 作者:行者123 更新时间:2023-12-03 14:34:21 29 4
gpt4 key购买 nike

所以假设我有一个 main.pl脚本,在该脚本中我需要声明一些变量(任何类型的变量常量或普通变量),并且这些变量需要通过我将包含的所有脚本和模块获得 main.pl自动编写脚本。

我的意思是如果我有一个变量 $myVarmain.pl来自 main.pl我需要 script1.pl , script2.plscript3.pm ,并且从我需要访问的任何脚本中$myVar正如您将访问在该特定脚本或模块中定义的任何 var。

我在网上搜索过,但我只找到了可以从包含的脚本中访问变量或从模块中提取变量的示例;但这不是我想要的。

没有像 PHP 那样的关键字,你会使用 global $var1, $var2等使用父脚本中的变量?

任何示例、文档或文章都是可以接受的——基本上任何可以帮助我完成的东西都会有所帮助。

最佳答案

您可以使用 our 声明全局变量。关键词:

our $var = 42;

每个全局变量都有一个完全限定的名称,可用于从任何地方访问它。全名是包名加上变量名。如果您此时尚未声明包,则您在包中 main , 可以缩短为前导 :: .所以上面的变量有名字
$var       # inside package main
$main::var # This is most obvious
$::var # This may be a good compromise

如果我们使用了另一个包,前缀会改变,例如
package Foo;
our $bar = "baz";
# $Foo::bar from anywhere,
# or even $::Foo::bar or $main::Foo::bar

如果我们想使用不带前缀的变量,但是在其他包下,我们必须将其导出。这通常通过子类化 Exporter 来完成。 ,请参阅@Davids 的回答。但是,这只能提供来自 use 的包的变量。 d,反之亦然。例如。
Foo.pm :
package Foo;
use strict; use warnings;
use parent 'Exporter'; # imports and subclasses Exporter

our $var = 42;
our $not_exported = "don't look at me";

our @EXPORT = qw($var); # put stuff here you want to export
# put vars into @EXPORT_OK that will be exported on request

1;
script.pl :
#!/usr/bin/perl
# this is implicitly package main
use Foo; # imports $var

print "var = $var\n"; # access the variable without prefix
print "$Foo::not_exported\n"; # access non-exported var with full name

词法变量(用 my 声明)没有全局唯一名称,不能在其静态范围之外访问。它们也不能与 Exporter 一起使用.

关于Perl - 所有包含的脚本和模块中都可用的全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16472187/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com