[첫화면으로]Perl/변수

마지막으로 [b]

26 번째 수정본
1. perl 의 변수
2. 특수한 스칼라 변수
3. Scope
3.1. global (package) variable
3.2. lexical variable
3.3. runtime scope
3.4. 스코프에 영향을 미치는 것
4. Global 변수 보충
5. 수와 문자열
5.1. 수로 다룰 때와 문자열로 다룰 때의 차이로 인한 오작동 사례
6. 기타 & Comments

1. perl 의 변수

2. 특수한 스칼라 변수

3. Scope

3.1. global (package) variable

$main::name   = "Your Name Here";
$Fred::name   = "Fred Flintstone";
$Barney::name = "Barney Rubble";

print "\$name in package main   is $name\n";         # 현재 패키지의 $name, 이 경우 $main::name
print "\$name in package Fred   is $Fred::name\n";
print "\$name in package Barney is $Barney::name\n";

$main::name   = "Your Name Here";
$Fred::name   = "Fred Flintstone";
$Barney::name = "Barney Rubble";

print "\$name in package main   is $name\n";
package Fred;
print "\$name in package Fred   is $name\n";
package Barney;
print "\$name in package Barney is $name\n";
package main;

3.2. lexical variable

my $var; 로 선언

3.3. runtime scope

local $var; - 해당 블록이 끝날때까지는 서브루틴으로 점프해도 영향을 미친다. lexical 변수는 그렇지 않음
my $x = 10;              # Line 5
$_ = "alpha";
{
   my $x = 20;         # 이것은 이 블록 안에서만
   local $_ = "beta";  # 이것은 somesub()에까지 영향을 미친다
   somesub();          # Line 10
}
somesub();

sub somesub {
   print "\$x is $x\n";
   print "\$_ is $_\n";
}

$x is 10
$_ is beta
$x is 10
$_ is alpha

$/와 같은 특수 변수를 다루는 경우를 제외하면, local을 쓰는 것을 지양하고 my를 쓸 것. 전역 변수를 조작해야 하는 경우가 생긴다면 디자인을 새로 하는 것을 고려해보라고 함2

3.4. 스코프에 영향을 미치는 것

요점:

4. Global 변수 보충

요점:

5. 수와 문자열

5.1. 수로 다룰 때와 문자열로 다룰 때의 차이로 인한 오작동 사례

어떤 스칼라 변수의 초기값이 숫자였을 때, 이것을 문자열 결합 연산자 .를 쓰거나 따옴표 안에 넣어 interpolate시키거나 할 경우 그 시점에 문자열 값이 추가되는 걸 알 수 있다.

use Devel::Peek;

my $inc = 5;
Dump($inc);
print '<',$inc,'>', "\n";
Dump($inc);
print '<'.$inc.'>', "\n";   # 이 시점. 또는 "[$inc]"도 마찬가지
Dump($inc);

SV = IV(0x7fa88382d728) at 0x7fa88382d738
  REFCNT = 1
  FLAGS = (PADMY,IOK,pIOK)
  IV = 5
<5>
SV = IV(0x7fa88382d728) at 0x7fa88382d738
  REFCNT = 1
  FLAGS = (PADMY,IOK,pIOK)
  IV = 5
<5>
SV = PVIV(0x7fa88382f820) at 0x7fa88382d738
  REFCNT = 1
  FLAGS = (PADMY,IOK,POK,pIOK,pPOK)
  IV = 5
  PV = 0x7fa88340bd70 "5"\0
  CUR = 1
  LEN = 16

6. 기타 & Comments

이름:  
Homepage:
내용:
 

컴퓨터분류
각주:
1. Perldoc:Perlmod
2. Beginning Perl, 1st ed. 260p

이 수정본 편집일: 2014-4-9 4:42 pm (변경사항 [d])
9516 hits | Permalink | 변경내역 보기 [h] | 현재 수정본 보기 | 26 번째 수정본 소스 보기