Perl 특수 변수


Perl 언어는 일반적으로 $, @ 또는 % 접두사가 붙는 몇 가지 특수 변수를 정의합니다(예: $_).

많은 특수 변수에는 긴 영어 이름이 있습니다. $OS_ERROR로 운영 체제 변수를 쓸 수 있습니다.

특수변수에 영어 이름을 사용하려면 프로그램 헤더에 use English;를 추가해야 합니다. 이를 통해 설명적인 영어 특수 변수를 사용할 수 있습니다.

가장 일반적으로 사용되는 특수 변수는 $_이며 기본 입력 및 패턴 일치 내용이 포함되어 있습니다. 예는 다음과 같습니다.

#!/usr/bin/perl

foreach ('Google','php','Taobao') {
	print $_;
	print "\n";
}

위 프로그램을 실행하면 출력 결과는 다음과 같습니다.

Google
php
Taobao

다음 예에서는 내용을 출력하기 위해 $_를 사용하지 않습니다.

#!/usr/bin/perl

foreach ('Google','php','Taobao') {
	print;
	print "\n";
}

위 프로그램을 실행하면 출력 결과는 다음과 같습니다. :

Google
php
Taobao

예제에서는 "Google"이 먼저 출력되고 그 다음 "php"가 출력되고 마지막으로 "Taobao"가 출력됩니다.

반복 루프에서는 현재 루프의 문자열을 $_에 넣은 후 print를 통해 출력합니다. 또한 print는 출력 변수를 지정하지 않으며 기본적으로 $_가 사용됩니다.

지정되지 않은 경우에도 Perl이 $_를 가정하는 곳은 다음과 같습니다.

  • ord() 및 int( )와 같은 다양한 단항 함수 이러한 함수 기본적으로 STDIN을 실행하는 "-t"를 제외한 모든 파일 테스트 작업("-f", "-d")입니다.

  • print(), unlink() 등 다양한 목록 기능.

  • "=~" 연산자를 사용하지 않고 "m//", "s///" 및 "tr///" 패턴 일치 작업을 수행합니다.

  • 은 다른 변수가 지정되지 않은 경우 "foreach" 루프의 기본 반복 변수입니다.

  • grep() 및 map() 함수에 대한 암시적 반복 변수입니다.

  • "while"에 조건이 하나만 있고 조건이 "" 연산의 결과를 테스트하는 경우 $_가 입력 레코드를 저장하는 기본 위치입니다. 이는 "while" 테스트 조건을 제외하고는 발생하지 않습니다. (니모닉: 특정 연산에서는 밑줄이 생략될 수 있습니다.)


특수변수 종류

특수변수의 사용 성격에 따라 구분될 수 있습니다. 다음 범주로 분류:

  • 전역 스칼라 특수 변수.

  • 전역 배열 특수 변수입니다.

  • 전역 해시 특수 변수입니다.

  • 글로벌 특수 파일 핸들입니다.

  • 전역 특수 상수입니다.

  • 정규 표현식 특수 변수입니다.

  • 파일 핸들 특수 변수입니다.

전역 스칼라 특수 변수

다음은 특수 문자와 영어 변수를 포함한 모든 스칼라 특수 변수 목록입니다.

$_기본 입력 및 패턴 일치 콘텐츠입니다.
$ARG
$.마지막으로 읽은 파일 핸들의 현재 줄 번호
$NR
$/레코드 구분 기호를 입력하세요. 기본값은 개행 문자입니다. undef 변수를 사용하면 파일의 끝 부분을 읽습니다.
$RS
$,출력 도메인 구분 기호
$ OFS
$출력 레코드 구분 기호
$ORS
$ "이 변수는 $와 유사하지만 배열 및 슬라이스 값을 큰따옴표로 묶인 문자열(또는 유사한 보간된 문자열)로 보간하는 데 사용해야 합니다. 기본값은 공백입니다.
$LIST_SEPARATOR
$;다차원 배열을 시뮬레이션할 때 사용되는 구분 기호는 기본적으로 ".
$OFMT
$?마지막 외부 명령의 상태를 반환합니다
$CHILD_ERROR
$!이 변수의 숫자값은 errno값이고, 문자열값은 해당 시스템 오류 문자열입니다
$OS_ERROR 또는 $ERRNO
$@명령어의 오류 메시지가 비어 있으면 다음을 의미합니다. 마지막 평가 명령이 성공적으로 실행되었습니다.
$EVAL_ERROR
$$현재 Perl 스크립트를 실행하는 프로세스 번호
$PROCESS_ID 또는 $PID
$<현재 프로세스의 실제 사용자 ID
$REAL_USER_ID 또는 $UID
$>현재 프로세스의 유효 사용자 ID
$EFFECTIVE_USER_ID 또는 $EUID
$(현재 프로세스의 실제 그룹 사용자 ID
$ REAL_GROUP_ID 또는 $GID
$)현재 프로세스의 유효 그룹 사용자 ID
$EFFECTIVE_GROUP_ID 또는 $EGID
$0실행 중인 스크립트의 파일 이름이 포함됩니다.
$PROGRAM_NAME
$[배열의 배열 요소의 첨자, 기본값은 0입니다.

$]Perl 버전 번호
$PERL_VERSION
$^D디버그 플래그 값
$DEBUGGING
$^EUNIX가 아닌 환경의 OS 확장 오류 메시지
$EXTENDED_OS_ERROR
$^F 최대 파일 번들 설명자 값
$SYSTEM_FD_MAX
$^H 구문 검사 상태 활성화됨 컴파일러에 의해

$^I 내장 컨트롤 편집기 값
$INPLACE_EDIT
$^M백업 메모리 풀 크기

$^O운영 체제 이름
$OSNAME
$^P현재 디버그 값을 지정하는 내부 변수
$PERLDB
$^T새 세기가 시작될 때부터 스크립트가 실행되기 시작하는 시간(초)
$BASETIME
$^W경고 스위치의 현재 값
$WARNING
$^X경고 스위치의 이름 Perl 바이너리 실행 코드
$EXECUTABLE_NAME
$ARGV기본 파일 핸들에서 읽을 때 현재 파일 이름

전역 배열 특수 변수

@ARGV
@ARGV传给脚本的命令行参数列表
@INC在导入模块时需要搜索的目录列表
@F命令行的数组输入
스크립트에 전달된 명령줄 매개변수 목록

%INC

散列表%INC包含所有用do或require语句包含的文件.关键字是文件名,值是这个文件的路径

%ENV

包含当前环境变量

%SIG

信号列表及其处理方式
@INC<🎜>모듈 가져오기 시 검색할 디렉터리 목록<🎜><🎜><🎜> @F<🎜 >명령줄에서 배열 입력<🎜><🎜><🎜><🎜><🎜>전역 해시 특수 변수<🎜>

%INC

<🎜>
해시 테이블 %INC do 또는 require 문에 포함된 모든 파일을 포함합니다. 키워드는 파일 이름이고 값은 파일의 경로입니다. <🎜><🎜><🎜>

%ENV

<🎜>
현재 환경 변수를 포함합니다<🎜><🎜><🎜>< p style="text-align:center;">%SIG

<🎜>
신호 목록 및 처리 <🎜>< 🎜><🎜> <🎜>

전역 특수 파일 핸들

ARGV

遍历数组变量@ARGV中的所有文件名的特殊文件句柄

STDERR

标准错误输出句柄

STDIN

标准输入句柄

STDOUT

标准输出句柄

DATA

特殊文件句柄引用了在文件中 __END__ 标志后的任何内容包含脚本内容。或者引用一个包含文件中__DATA__ 标志后的所有内容,只要你在同一个包有读取数据,__DATA__ 就存在。

_ (下划线)

特殊的文件句柄用于缓存文件信息(fstat、stat和lstat)。

전역 특수 상수

__END__

脚本的逻辑结束,忽略后面的文本。

__FILE__

当前文件名

__LINE__

当前行号

__PACKAGE__

当前包名,默认的包名是main。

정규 표현식 특수 변수

$n

包含上次模式匹配的第n个子串

$&

前一次成功模式匹配的字符串

$MATCH

$`

前次匹配成功的子串之前的内容

$PREMATCH

$'

前次匹配成功的子串之后的内容

$POSTMATCH

$+

与上个正则表达式搜索格式匹配的最后一个括号。例如:

/Version: (.*)|Revision: (.*)/ && ($rev = $+);

$LAST_PAREN_MATCH

파일 핸들 특수 변수

$|

如果设置为零,在每次调用函数write或print后,自动调用函数fflush,将所写内容写回文件

$OUTPUT_AUTOFLUSH

$%

当前输出页号

$FORMAT_PAGE_NUMBER

$=

当前每页长度。默认为 60。

$FORMAT_LINES_PER_PAGE

$-

当前页剩余的行数

$FORMAT_LINES_LEFT

$~

当前报表输出格式的名称。默认值是文件句柄名。

$FORMAT_NAME

$^

当前报表输出表头格式的名称。默认值是带后缀"_TOP"的文件句柄名。

$FORMAT_TOP_NAME