Perl 변수 역할 영역

23891 단어 perl
( )    

$x = 1$x     。     , 21)        ,       ; 
2)        。 

                   。     $x=1 ,         ,              ,       $x  。      ;        。 

        (  packages)。          22               。    ,           'AL''Al Gore'  ,     。   ,$x$main::x。         ,   'Al Gore'  'Gore'  。Al Gore AL Capone     ,       'AL'。   ,$Gore::Al $Capone::Al$main::x and $DBI::x       。 

           ,     ,perl             。      ,             。 

1.    

     $x,perl             $x。      ?       main,         ,       : 

package Mypackage; 

     ,     Mypackage。          ,         ,          。      Mypackage,  $x   $Mypackage::x。      main,  $x   $main::x。 

          ,       MyModule,                 : 

package MyModule; 

     ,                   MyModule ,       ,                  。      DBI             $x,         ,   $MyModule::x$DBI::x。 

          。     DBI  ,           DBI ,             $DBI::errstr。          。$DBI::errstr        ,      ,       ;               。       : 

package DBI; 
$errstr = 'Ha ha Tim!'; 

      $DBI::errstr2.         

1)     ,    main。     x$::x   $main::x2)          main  。  ,     %ENV,perl    %main::ENV,       main。     %Fred::ENV,       ,      Fred。         INC,             $_,$$, @ARGV,  STDIN, STDOUT,  STDERR。 

3)  ,     ,    ::。        $DBD::Oracle::xx   DBD::Oracle ;   DBD      。Isaac Newton  Olivia Newton-John  ,  Newton::Isaac  Newton::John::Olivia  。         Newton  ,          。Newton::John::Olivia  Newton::John  ,   Newton 。 

                 。 

       ,         ,                   。 Perl 4  ,          ,      。  perl 5          。 


( )     

Perl                   ,        。       mymylocal  ,                   。      ,             perl locallocalmylocalmy $x; 

            ,  x,              ,                   。          。            ,                ,      。 

           my  ,   : 

my $x = 119; 

          : 

my ($x, $y, $z, @args) = (5, 23, @_); 

                 。       : 

sub print_report { 
@employee_list = @_; 
foreach $employee (@employee_list) { 
$salary = lookup_salary($employee); 
print_partial_report($employee, $salary); 
} 
} 

  lookup_salary        $employee   ,      print_report     ,        。  print_report lookup_salary 2        ,              。      。   ,              ,         。 

     :  mysub print_report { 
my @employee_list = @_; 
foreach my $employee (@employee_list) { 
my $salary = lookup_salary($employee); 
print_partial_report($employee, $salary); 
} 
} 

my @employee_list          ,  print_report          。 my $employeeforeach         。                    ,         ;            ,        mymy           ,                   ,        ,            。        ,            。           ,              my  。     ,                  。               my  ,         ,    ,      。         my  ,           。 

my       。         ,        。                   。      : 

my $x = 17; 

package A; 
$x = 12; 

package B; 
$x = 20; 

# $x is now 20. 
# $A::x and $B::x are still undefined 

    my $x=17            x     ,            。$x$xpackage A      ,   $x       ,      ,$x=12   $A::x     。   , package B ,$x=20       ,        。 

     ,    $x  20$main::x, $A::x,  $B::x    。       ,           。 

      : 

        。 
     ,    my1. local mylocal  ,          。       , my    ?       : 

mylocal   。 

  ,local $x$x            ,          ,        ,   undef  。         ,     $x   。        ,           。         ,local          。       ,    : 

$lo = 'global'; 
$m = 'global'; 
A(); 

sub A { 
local $lo = 'AAA'; 
my $m = 'AAA'; 
B(); 
} 

sub B { 
print "B ", ($lo eq 'AAA' ? 'can' : 'cannot') , 
" see the value of lo set by A.
"
; print "B ", ($m eq 'AAA' ? 'can' : 'cannot') , " see the value of m set by A.
"
; } : B can see the value of lo set by A. B cannot see the value of m set by A. ? A local$lo AAA。 global , A , ,A B。B $lo$lo , , A AAA 。 ,my $x, A 。 A ,$m$m; global。 B 。 AAA , , A 。 2.locallocal , 。 , B $lo , A 。 。 , 。 mylocal90% 。 perl 。local , perl4 。 perl5 , 。 localmymy, , ; localmy localmylocal ? : mylocal3.my my ,perl , 。 , x=1 50for (1 .. 50) { my $x; $x++; print "x=$x
"
; } , $xundef。 , , : { my $x; for (1 .. 50) { $x++; print "x=$x
"
; } } x=1, x=2, x=3, ... x=50. 。 , 。 , 。 ( perl rand ) 。 。 , , 。 , 。 : $seed = 1; sub my_rand { $seed = int(($seed * 1103515245 + 12345) / 65536) % 32768; return $seed; } : 16838 14666 10953 11665 7451 26316 27974 27550$seed , 。 , 。 , , ? $seed mysub my_rand { my $seed; $seed = int(($seed * 1103515245 + 12345) / 65536) % 32768; return $seed; } , my_rand ,$seed undef。 , my_rand ,$seed 。 : { my $seed = 1; sub my_rand { $seed = int(($seed * 1103515245 + 12345) / 65536) % 32768; return $seed; } } , , 。 my , , 。my_rand , $seed my_rand 。 4. my 1) my_, @_, $$$1, $2, ... mymy2) , my $DBI::errstr, : $DBI::errstrlocal $DBI::errstrlocal $DBI::errstr , 。 3) perl 5.004 , : foreach my $i (@list) { $i 。 , for (my $i=0; $i<100; $i++) { $i for 。 ( ) , , my 。 , ? sub function { $x = 42; # Oops, should have been my $x = 42. } , $x。 , 。 perl , 。 : use strict 'vars'; ,perl 。$x=42 $x , ; , , : Global symbol "$x" requires explicit package name at ... $x mymy。 , : $main::x = 42; 。 use strict , perldoc strict 。 Algorithms::KnuthBendix , strict vars , $Algorithms::KnuthBendix::Error, 。 strict vars : package Algorithms::KnuthBendix; use vars '$Error'; $Error$Algorithms::KnuthBendix::Error strict vars 。 , strict vars: { no strict 'vars'; # strict vars is off for the rest of the block. } ( ) 。 。 , perl , package 。 , mylocal, 。 , 2 。 , use strict 'vars'。 , , use vars 。 ( ) 'our' perl 5.6.0 our(...) 。 my() , use vars 。 ,our() use vars; , strict 'vars'use vars, 2 : , 。 , stict : use strict 'vars'; { our($x); $x = 1; # $x } $x = 2; # $x use vars '$x'$xour($x) $x, , 。 our , : our strict pragma, our , , . , , strict pragma . : 1. #! /usr/bin/perl -w 2. 3. use strict; 4. 5. { 6. our $var; 7. $var = 2; 8. print $var, "
"
; 9. } 10. 11. if ( defined $main::var ){ 12. print '$main::var defined! value = ', "$main::var.
"
; 13. } 14. else{ 15. print '$main::var not defined!', "
"
; 16. } : 2 $main::var defined! value = 2.

좋은 웹페이지 즐겨찾기