Perl의 특수 내장 변수 상세 소개

6182 단어
내장 변수 $:먼저 다음 예를 살펴보겠습니다.
 
  
#!/usr/bin/perl -w
@array = qw(a b c d);
foreach (@array) {
 print $_," ";
}

예를 들어 하나의 그룹을 정의하고 그 중의 요소를 출력하는 것입니다. 여기서 주의해야 할 것은foreach 순환 부분입니다.foreach 순환의 표준 형식은 다음과 같습니다.

   foreach $element (@array){ 
  
 ......
}

그 중 그룹 @array는 그 중의 요소를 순서대로 $element에 값을 부여하지만, 위의 프로그램에서 나는 이렇게 하지 않았다. 프로그램에서perl에 내장된 특수 변수를 사용했다. $
프로그램 다섯 번째 줄에서foreach(@array)는 실제로foreach$와 같다(@array), 여기, $기본값은 입력/출력입니다. 따라서 프로그램에 명확하게 명시되지 않은 변수의 위치가 있을 때 $을 사용할 수 있습니다.대신
내장 변수 $$:

   perl -e "sleep(5);  print qq (The PID of process perl.exe is : $$)";  
 
 
명령줄에 사용되는 perl 프로그램입니다. print qq(The PID of process perl.exe is: $$)를 출력하는 데 사용됩니다. 여기에 특수 변수 $$가 존재합니다.
$$는 현재 퍼블릭 해상도의 프로세스 ID (즉 PID) 입니다. 명령줄에 세그먼트 프로그램을 쓸 수 있습니다. 이 프로그램은 퍼블릭 해상도가 실행된 지 5초 후에 퍼블릭 해상도의 프로세스 ID를 출력합니다. 프로그램이 실행되는 동안 프로세스 목록을 보고 출력 결과가 정확한지 확인할 수 있습니다.
내장 변수 $!:다음은 오류 정보 (또는 오류 번호) 를 되돌려 주는 특수 변수입니다.수고를 덜기 위해서 프로그램을 쓰지 말고 명령행으로 하자

   perl -e "opendir FH,'c: one' or die qq (can't open:$!);"; 
 

이 말은 C디스크 아래에 있는 none 디렉터리를 열려는 것입니다. (실제로 제 C디스크에는 이 디렉터리가 없습니다. 프로그램의 오류 정보를 일으키기 위해서 이렇게 쓴 것입니다.) 열리지 않으면 다음dieqq (can't open: $!) 를 실행합니다.
여기 있습니다, $!오류 메시지가 표시된 컨텐트에 대해 명령줄에서 오류 메시지를 반환합니다.

   can't open:No such file or directory at -e line 1. 
 

$!오픈이나 오픈dir에 많이 사용됩니다. (파일을 열거나 파이프를 열거나 다른 것을 열거나)
예를 들어 재미있는 특수 내장 변수를 말해라

   $text = "C:\test.txt"; 
  
{
 open FH,$text or die "can't open:$!";
 my $line = ;
 close FH;
 print $line;
}
print "#===========================# ";
{
 undef $/;
 open FH,$text or die "can't open:$!";
 my $line = ;
 close FH;
 print $line;
}

=================================
C디스크 아래의 테스트.txt의 내용은 다음과 같습니다.
111111111111111111111111111
222222222222222222222222222
333333333333333333333333333
=================================
좋습니다. 프로그램 실행 결과는 다음과 같습니다.
111111111111111111111111111
#===========================#
111111111111111111111111111
222222222222222222222222222
333333333333333333333333333
프로그램은 쓸데없는 말을 하지 않는다. 작용은 바로 파일을 읽는 것이다. 관건적인 부분은'$line='에 있다. 뾰족괄호 조작부호(즉, <>)는 한 줄의 파일 내용을 읽는 것이다(대부분의 교과서나 책에 이렇게 쓰여 있다고 믿는다). 그러나 여기서 말하는 한 줄은 사실상 하나의 표준이 있다. 그것이 바로perl이 줄 바꾸기를 만났을 때 한 줄로 여기는 것이다.줄 바꿈은 기본적으로 $/이 특수 변수로 정의되어 있으며, 절약값입니다.즉,perl은 <> 조작부호를 사용하여 파일을 읽을 때마다 $/에서 '구분자' 라는 것을 얻고, 이 구분부호를 표시로 파일을 읽습니다. 기본 $/로 말하면 이 분할부호는 줄 바꿈 문자이기 때문에, 기본으로 할 때 <> 조작부호는 한 줄의 텍스트를 읽을 수 있습니다.제시된 예에는 다음과 같은 구절이 있다. 즉, $/를 정의되지 않은 값으로 설정하면 $/는 더 이상 작용하지 않는다. 따라서 두 번째로 같은 조작을 할 때 <> 조작부호는 한 줄만 읽는 것이 아니라 파일 내용을 모두 읽는 것을 볼 수 있다.
다음은 $/의 영향을 받는 내장 변수 또는 인스턴스를 먼저 살펴보겠습니다.

   $text = "C:\test.txt"; 
  
open FH,$text or die "can't open:$!";
while () {
 print "line $. is:$_";
}
close FH;

먼저 순환 중:print "line $. is:$"
프로그램의 역할은 파일을 읽고 $(<> 조작부호만 사용하고 내부치 변수가 지정되지 않았기 때문에 기본값은 $에 부여됨).
하지만 여기는 $를 제외하고는,변수 "$."가 하나 더 있습니다.
결과를 살펴보겠습니다.

   line 1 is:111111111111111111111111111 
  
line 2 is:222222222222222222222222222
line 3 is:333333333333333333333333333

표시 가능, 변수 $.작용은 계수기와 유사한 것이지만, 왜 처음에 내가 달러를 말했는지.$/변수의 영향을 받을까요?
위의 예를 약간 수정한 다음 다시 한 번 봅시다.

   $text = "C:\test.txt"; 
  
undef $/; # ,
open FH,$text or die "can't open:$!";
while () {
 print "line $. is:$_";
}
close FH;

두 번째 줄에undef$/;위에서 말한 바와 같이 이 프로그램의 실행 결과를 살펴보자.

   line 1 is:111111111111111111111111111 
  
222222222222222222222222222
333333333333333333333333333

원래 세 줄이어야 하는 텍스트가 한꺼번에 인쇄될 뿐만 아니라'line 1'(프로그램이 이 텍스트가 한 줄만 있다고 생각하는 것 같다)도 가리키는데 왜?
$때문이에요.변수는 단순한 행계수기가 아니다. 정확히 말하면 $라고 할 수 있다.$/카운터입니다. 프로그램을 한 번 더 보면 알 수 있습니다.

   $text = "C:\a.txt"; 
  
$/ = ";"; # , $/ ,
open FH,$text or die "can't open:$!";
while () {
 print "line $. is:$_ ";
}
close FH;

다시 한 번 C판 아래의 a.txt 내용을 보십시오.

   ddd;bbb;ccc;fff;eee; 
 

이렇게 간단해.
결과를 검토하십시오.

   line 1 is:ddd; 
  
line 2 is:bbb;
line 3 is:ccc;
line 4 is:fff;
line 5 is:eee;

이 프로그램을 보면 알 수 있겠지.
좋아, $.이미 많이 틀리지 않았는데, 다음에 그것의 특성을 하나 더 말하자면, 여전히 프로그램을 보고 말한다.

   $text = "C:\test.txt"; 
  
open FH,$text or die "can't open:$!";
while () {
 print "line $. is:$_ ";
}
print " ",$.;
close FH;
print " ",$.;

이 프로그램에서 주의해야 할 것은 마지막 세 줄의 두 print ", $.하나는 파일을 닫기 전이고 다른 하나는 파일을 닫은 후입니다.
결과 보기:

   line 1 is:111111111111111111111111111 
  
line 2 is:222222222222222222222222222
line 3 is:333333333333333333333333333
3
0

결과의 앞의 세 줄은 아까부터 알고 있었다. 이것은 우리가 관심을 가지는 것이 아니다. 우리가 관심을 가져야 할 것은 마지막 두 줄의 결과(즉 두 개의 print", $.;의 결과)이다.
$. 변수는 기억성이 있기 때문에 (원리적으로 패키지 변수이기 때문에) 파일을 닫기 전에 인쇄하면 변수의 값이 변하지 않은 것을 발견할 수 있습니다. (이 때의 값과 마지막으로 읽은 파일의 값은 모두 3 입니다.)
파일을 닫은 후에 이 변수는 다시 0으로 초기화되었다.
이 특성은 여러분이 주의하시면 됩니다. 그 중의 원리는perl의 작용역과 가방의 일부 지식과 관련되기 때문에 쉽게 설명하지 못하기 때문에 말하지 않겠습니다. 만약에 가방과 작용역에 대해 알고 있는 독자가 이 부분에 대해 제가 말하지 않아도 그들은 이해할 수 있을 것입니다.
내장 변수: $^O: 마지막 하나만 더 말해 주세요. 운영체제 유형을 간단하게 판단하는 데 사용할 것을 말해 보세요. 예를 들어 다음과 같습니다.

   C:>perl -e "print $^O;"; 
  
MSWin32

이 특수 변수 $^O의 마지막 문자는 알파벳 O이고 대문자입니다.
만약 linux에 있었다면 결과는 MSWin32가 아니라 Linux였을 것이다.
이것은 환경을 판단하는 변수로 간단하고 실용적이다.

좋은 웹페이지 즐겨찾기