'특수 변수'에 해당되는 글 1건

  1. 2010.08.29 [PERL] 특수 변수

[PERL] 특수 변수

CS/Shell/Perl/Python 2010. 8. 29. 23:58
원문 : Perl 프로그래밍 (2nd Ed)

전역 특수 변수

$_
: 기본 입력 및 패턴 일치 공간. 다음 각 쌍은 동일한 효과를 갖는다.
while (<>) { ... }
while (defined($_ = <>)) { ...}
/^Subject:/
$_ =~ /^Subject:/
chop
chop($_)

$.
: 가장 최근에 읽은 파일 핸들의 현재 입력 행 번호.
: 명시적으로 파일 핸들을 닫으면 이 값을 리셋하는 효과가 있다.
: <>는 명시적으로 파일 핸들을 닫지 않으므로, ARGV로 지정된 파일에 대해서는 행 번호는 계속 증가한다.
: $.를 지역화하는 것은 Perl이 최근에 읽어 들인 파일 핸들을 지역화하는 효과가 있다.

$/
: 입력 레코드 구분자로 기본값은 개행 문자이다.
: 만약 널 문자열로 지정되면 빈 줄(blank line)을 구획문자로 취급한다.
: 여러 개의 글자를 구획문자로 사용하기 위해서 여러 개의 글자로 이루어진 문자열을 지정할 수도 있다.
undef $/;
$_ = <FH>;          # whole file now here

$,
: print 연산자에 적용되는 출력 필드 구분자이다.
: 보통 print 연산자는 쉼표로 구분된 필드를 출력한다.
: awk에서와 비슷하게 동작하도록 하려면, awk의 OFS 변수를 지정해서 출력될 필드를 구분하는 것과 마찬가지 방법으로 이 변수를 지정하면 된다.

$\
: print 연산자에 적용되는 출력 레코드 구분자이다.
: 보통 print 연산자는 쉼표로 구분된 필드를 출력하며, 뒤에는 개행 문자나 레코드 구분자가 없다고 가정한다.
: awk에서와 비슷하게 동작하도록 하려면, awk의 ORS 변수를 지정해서 print의 마지막 부분에 출력될 내용을 지정하는 것과 같이 이 변수를 지정하면 된다.

$*
: 이 변수는 겹 따옴표 문자열에서 치환되는 리스트 값에 적용된다는 점만 제외하고는 $,와 동일하다.
: 기본값은 스페이스 이다.

$;
: 다차원 배열 연산에서의 첨자 구분자이다. 
: 만약 다음과 같이 해쉬 요소를 참조하는 경우
$foo{$a, $b, $c}
실제로는 다음을 의미한다.
$foo{join($;, $a, $b, $c)}

: 그러나 다음과 같이 할 경우
@foo{$a, $b, $c}
실제로는 다음을 의미하게 되므로 주의하여야 한다.
($foo{$a}, $foo{$b}, $foo{$c})

$^L
: 쪽 넘김시 출력될 내용을 지정한다.
: 기본값은 "\f" 이다.

$:
: 문자열이 나뉘어 질 때 출력서식문에서 ^로 시작하는 연속 필드를 채우는데 사용되는 문자의 세트를 지정한다.
: 기본값은 "\n-" 이다.

$^A
: format 행에 대한 write accumulator의 현재값을 나타낸다.
: formline을 포함하는 출력서식문을 사용하여 결과를 $^A에 넣도록 할 수 있다.
: 출력서식을 알아낸 다음 write는 $^A의 내용을 출력한 다음 $^A를 비운다. 따라서 formline을 사용하지 않고서는 $^A의 값을 알아낼 수 없다.

$?
:  가장 최근에 닫은 파이프, 백틱(`) 명령, 혹은 system 연산자 등에서 반환된 결과를 담고 있다.
: 실제로 이 값은 wait(2) 시스템 호출에 의해 반환된 상태이므로, 서브프로세스의 종료값은 실제로 ($? >> 8)에 해당한다.
: 따라서 많은 시스템에서 $? & 255 하면 프로세스로부터 어떤 시그널이나 코어 덤프의 발생 여부를 알 수 있다.

$!
: 숫자 구문에서 사용될 경우 현재 실행중인 Perl에서 errno변수의 현재 값을 재공한다.
: 문자열 구문에서 사용될 경우, 해당되는 시스템 오류 문자열을 제공한다.

$@
: 가장 최근의 eval 명령어를 수행한 결과 발생한 문법 오류 메세지를 담고 있다.
: 최근 eval 명령어가 정상적으로 수행되어 오류가 발생하지 않았다면 널 값을 갖는다.

$$
: Perl이 현재 스크립트를 수행하는 프로세스 번호

$<
: 현재 프로세스의 실 user ID (uid)
: set-id 루틴을 지원할 때만 지정할 수 있다.

$>
: 현재 프로세스의 유효 uid
: set-id 루틴을 지원할 때만 지정할 수 있다.

$(
: 현재 프로세스의 실 GID
: set-id 루틴을 지원할 때만 지정할 수 있다.

$)
: 현재 프로세스의 유효 GID
: set-id 루틴을 지원할 때만 지정할 수 있다.

$0
: 현재 수행 중인 Perl 스크립트를 포함하고 있는 파일의 이름.
: $0에 값을 대입하여 ps 프로그램이 참조하는 영역을 변경할 수 있다.
: 이것은 현재 수행중인 프로그램을 숨기는 것보다 현재 프로그램의 상태를 나타내는 방법으로 유용하게 쓰인다. 그러나 모든 시스템에서 이처럼 동작하지는 않는다.

$]
: 현재 Perl의 버전 + 패치레벨/1000을 반환한다.

$^D
: 디버깅 플래그의 현재 값

$^F
: 시스템 파일 기술자(system file descriptor)의 최대값으로, 기본적으로 2 이다.

$^H
: 특정 pragmatic 모듈에 의해 활성화 되는 내부 컴파일러 힌트값 (이 값은 무시하고 pragma문을 사용하라)

$^I
: inplace_edit 확장의 현재 값. inplace 편집을 활성화하려면 undef를 사용한다.
 
$^O
: 현재 Perl 바이너리가 컴파일된 시스템 운영체제 이름. Config 모듈 대신 사용할 수 있는 간단한 방법이다.

$^P
: 디버거가 자기 자신을 디버그하지 않도록 클리어하는 내부 플래그.
: 사용자가 이 값을 클리어하여 확실하게 디버그를 하지 않도록 할 수 있다.

$^T
: 1970년부터 시작하여 해당 스크립트가 실행된 시간을 초 단위로 환산한 값.
: -M, -A, -C와 같은 파일 테스트 연산자는 이 값에 근거한다.

$^W
: 현재 경고 스위치의 값

$^X
: 실행된 Perl 바이너리 자신의 이름. C엑서의 argv[0]에 해당

$ARGV
: <ARGV>로부터 읽어 들일 때 현재 파일의 이름



전역 특수 변수 

@ARGV
: 해당 스크립트에 대한 명령어 행 파라미터를 담고 있는 배열.
: $#ARGV는 파라미터의 수-1 을 담고 있고, $ARGV[0]는 프로그램의 이름이 아니라 전달된 첫 번째 파라미터를 담고 있다는 것을 주의.
: 프로그램의 이름은 $0을 참조 하라.

@INC
: Perl 스크립트가 do EXPR, require, use 구조를 사용할 때 참조해야 하는 위치 리스트를 담은 배열.
: 초기에는 -I 명령어 행 스위치에 해당하는 값과, 기본 Perl 라이브러리의 위치를 포함하고 있다.
: 현재 디렉토리를 참조하려면 "."를 추가하면 된다.
: 실행시 @INC 리스트를 변경할 필요가 있을 때는, 시스템과 관련된 라이브러리 모듈을 제대로 불러 들이기 위해 다음과 같이 lib모듈을 사용해야만 한다.
use lib '/mypath/libdir/';
use SomeMod;

@F
: -a 스위치가 사용되얼을 때 입력 행이 split되어 입력되는 배열.
: -a 스위치가 사용되지 않으면 이 배열은 특별한 의미가 없다.

%INC
: do나 require를 통해 포함된 각 파일의 파일명을 담고 있는 해쉬.
: 키는 사용자가 지정하는 파일명이고, 값은 실제로 해당 파일을 찾은 위치를 갖고 있다.
: require 명령을 사용할 때, 이 값을 참조하여 주어진 파일의 포함 여부를 결정한다.

%ENV
: 현재 환경 변수의 값.
: %ENV의 값을 변경하면 자식 프로세스의 환경을 바꾸게 된다.
: 환경 변수에서 특정한 값을 없애려면 undef 대신 delete를 사용해야 한다.

%SIG
: 다양한 시그널을 처리하기 위한 시그널 핸들러에 의해 사용되는 해쉬.
sub handler {
    local($sig) = @_;
    print "Caught a SIG$sig--shutting down\n";
    close(LOG);
    exit(0);
}
$SIG{INT} = 'handler';
$SIG{QUIT} = 'handler';

$SIG{INT} = 'DEFAULT';      # restore default action
$SIG{QUIT} = 'IGNORE';      # ignore SIGQUIT

: $SIG{__WARN__} 로 지정된 루틴은 경고 메세지가 출력될 때 호출된다. 경고 메세지는 첫 번째 파라메터로 전달된다. 
- 후크가 존재하면 일반적으로 STDERR로 출력되던 경고 메세지가 출력되지 않게 된다.
: $SIG{__DIE__} 로 지정된 루틴은 치명적 예외 처리가 수행될 때 호출된다. 오류 메세지는 첫 번째 파라메터로 전달된다.
- 후크 루틴에서 반환될 때, 후크 루틴 자신이 goto나 루프 종료, die등에 의해 종료되지 않는 경우, 예외 처리 루틴은 마치 해당 후크가 없었던 것처럼 동작한다.
- __DIE__ 핸들러는 호출된 동안 명시적으로 비활성되어, __DIE__ 핸들러에서 실제 die를 호출할 수 있게 된다.



전역 특수 파일 핸들

ARGV
: @ARGV에 포함된 명령어 행 파일명에 대해 반복적으로 수행되는 특수한 파일 핸들.
: 보통 널 파일 핸들 <>로 표히된다.

STDERR
: 임의의 패키지에서 표준 오류를 위한 특수 파일 핸들.

STDIN
: 임의의 패키지에서 표준 입력을 위한 특수 파일 핸들.

STDOUT
: 임의의 패키지에서 표준 출력을 위한 특수 파일 핸들.

DATA
: 스크립트를 포함하는 파일에서 __END__ 토큰 다음에 나타나는 임의의 내용을 참조하는 특수 파일 핸들.
: 혹은, __DATA__ 를 찾는 같은 패키지에서 데이터를 읽는 동안 필요로 하는 파일 내에 __DATA__ 토큰 바로 다음에 나타나는 임의의 내용을 위한 파일 핸들.

_
: 가장 최근의 stat, lstat, 파일 테스트 연산 결과에 관한 정보를 캐쉬하기 위해 사용되는 특수 파일 핸들.



정규 표현식 특수 변수

$digit
: 가장 최근에 일치된 순서대로 괄호에 해당하는 일치된 문자열을 포함하고 있다. (\digit 와 같은 형태로도 사용된다.)

$&
: 가장 최근에 성공적으로 일치된 문자열이며, 블록 내에서 감추어져 일치된 내용이나 현재 블록에서 eval로 둘러 싸여 있는 내용은 포함하지 않는다.

$`
: 가장 최근에 성공적으로 일치된 문자열의 앞부분에 해당하는 문자열이며, 블록 내에서 감추어져 일치된 내용이나 현재 블록에서 eval로 둘러 싸여 있는 내용은 포함하지 않는다.

$'
: 가장 최근에 성공적으로 일치된 문자열의 뒷부분에 해당하는 문자열이며, 블록내에서 감추어져 일치된 내용이나 현재 블록에서 eval로 둘러 싸여 있는 내용은 포함하지 않는다.

$+
: 가장 최근의 일치 패턴에 의해 마지막 괄호로 일치된 문자열이며, 실제로 어떤 교대 문자열이 일치되었는지를 모를 경우에 유용하다.



파일 핸들 특수 변수 

$|
: 0이 아닌 값으로 지정하면 핸재 선택된 출력 채널로 매번 write 나 print가 행해질 때마다 fflush을 수행하도록 한다.
: 기본값은 0이며, 이것은 많은 시스템에서 터미널로 출력을 의미하는 경우 STDOUT은 기본적으로 라인 버퍼링으로, 그 밖의 경우 블록 버퍼링으로 처리되는 것을 의미한다.
: 이 변수의 값을 지정하는 것은 rsh에서 Perl 스크립트를 실행하면서 그 출력 결과를 보고 싶을 때와 같은 경우 유용하다.

$%
: 현재 선택된 출력 채널의 현재 쪽 번호

$=
: 현재 선택된 출력 채널의 출력 가능한 줄의 수. 기본값은 60

$-
: 현재 선택된 출력 채널의 쪽에서 남아 있는 줄 수

$~
: 현재 선택된 출력 채널에 적용될 출력서식의 이름. 기본값은 파일 핸들의 이름

$^
: 현재 선택된 출력 채널에 적용될 머리글 출력서식의 이름. 기본값은 파일 핸들에  _TOP을 붙인 것
: