2016-05-19 42 views
1

假設我的全局變量和局部變量具有相同的名稱,我如何訪問子程序中的全局變量值?如何在子程序中訪問全局變量

#! /usr/bin/perl 

$name = "Krishna"; 

sub printName{ 
my $name = "Sankalp"; 

print ("Local name : ", $name, "\n"); 
# How to print global variable here 
} 

&printName; 
print("Global name : ", $name, "\n"); 
+1

不要忘記'use strict;使用警告;' – squiguy

回答

5

如果您全球變量實際上是在一個包變量,您可以通過包命名空間訪問它。默認包是main

print "Local name : $main::name\n"; 

既然你住在同一個命名空間,則可以省略main,所以$::name的作品了。如果您的外部變量也是使用my定義的,則兩個解決方案都不起作用

您可以使用our或通過use names qw($name)定義包變量。


這就是說,你永遠不應該那樣做。總是使用詞法變量,並將它們放在儘可能最小的範圍內。 use strictuse warnings將幫助您,如果您在較小的範圍內定義與現有名稱相同的變量,則有a Perl::Critic rules that complains

3

你需要使用our聲明一個包變量,而不是詞法變量。在子程序中,您需要完全限定它來解決它。如果你需要在軟件包之間共享變量,你應該使用我們的。

my在詞法範圍內聲明變量。所以,變量一旦超出範圍就會死亡。這些變量也是私有的,不能被其他包所訪問。

#!/usr/bin/perl 
use strict; 
use warnings; 

our $name = "Krishna"; 

sub printName { 
    my $name = "Sankalp"; 
    print ("Local \$name: ", $name,"\n"); 
    print ("Global \$name: ", $main::name, "\n"); # or $::name inside the same package 
} 

printName; 
print("Global name : ", $name, "\n"); 
+0

你實際上更快:) – simbabque

+0

是的,我確實是:)。但是,你更精確。 –