본문 바로가기

컴퓨터/프로그래밍

Perl 기본적인 내장변수, 함수

Perl을 처음 공부하면서 나만의 레퍼런스용으로 계속 채워나갈 예정이었는데 몇 번 추가하다가 지금까진 그다지 활용 못했던 것 같다.

Perl 내장변수
**펄 내장 특수 변수는 my변수로 만들지 못하고 local로 지역화해야 한다.**
@_ : 어떤 함수에 입력값을 주면 그 입력값은 자동으로 이 배열에 들어간다.
@INC : 라이브러리 파일을 읽어올 디렉토리 경로를 가지고 있다.
$. : 파일을 열어 읽으면 이 변수에 현재까지 읽은 줄 수가 들어간다.
$\ : print문 뒤에 이 변수에 들어있는 값이 추가되어 출력된다. 정확히 말하면 이 변수에 들어있는 값이 줄바꿈 문자로 인식된다.
$/ : 기본적으로 "\n"이 들어있다.
$0 : 현재 실행중인 파일 경로와 이름이 들어있다.
$| : 기본값으로 0을 가지고 있으며, 1같은 참값이 되면 현재의 파일 핸들에 버퍼를 통하지 않는 출력을 한다.
$EOL : End of Line
$! : 오류 메시지가 담기는 변수이다.

Perl 함수
delete : 해시에서 한 쌍의 키와 값을 뺀다.
  ex) $val = delete $hash{'0'}; #해시에서, 0이라는 키와 그것의 값을 뺀다. 값은 리턴되어 $val에 저장된다.
hex : 인자 값에 해당하는 십진수 값을 리턴한다.
  ex) hex af; # 십진수 175
join : 리스트로 받은 인자들의 사이에 join의 첫 번째 인자를 집어 넣는다.
  ex) print join(" ", localtime); # 시간을 리턴하는 localtime의 결과(5452122310931110)에 54(초) 52(분) 1(시) 22(일) 3(월-1) 109(년) 3(일주일 중 몇 번째 날) 111(해당 년도 중 며칠째) 0(일광절약시간 여부)처럼 사이사이에 공백이 들어간다.
keys : 해시에서 키들을 뽑아낸다.
  ex) keys %hash;
last : 블록을 빠져나간다.
  ex) last if /^\s+$/;
map : 배열을 하나씩 가져와서 변수에 집어넣어 매핑한다.
  ex) @b = map($hash{$_}, @a); #@a배열의 값들을 순서대로 가져와 $_값에 넣고, 그것을 키로 하는 해시 값과 매핑시켜 @b배열에 저장한다.
open : 파일을 열 때 사용하고, 성공적으로 파일을 열면 1을 리턴하고 오류가 생기면 메시지를 $!변수에 담아서 리턴한다.
  ex) open FILE, "$WEB_SERVER_ROOT$FILE_NAME"
push : 배열에 값을 집어넣는다.
  ex) push @a, 0; #@a배열의 맨 끝에 0을 추가한다.
require : do와 하는 일이 같으나 오류검사를 한다. 코드가 runtime일 때 비로소 모듈을 실행한다.
  ex) require "socket.pm";
select : 파일 핸들을 선택하고 이전에 가지고 있던 파일 핸들을 리턴한다.
  ex) $fh = select S;
shift : 배열의 맨 처음값을 리턴하고 나머지 값들은 한 칸씩 앞으로 당긴다.(입력 인자없으면 @_ 배열 사용)
  ex) shift @<배열명> # 원래 배열에 1,2,3,4라는 값이 있었다면 1을 리턴하고 배열에는 2,3,4가 남는다.
sleep : 초단위로 프로그램 수행을 멈춘다.
  ex) sleep 1; # 1초간 멈춘다.
socket : 소켓을 생성한다.
  ex) socket(S, AF_INET, SOCK_STREAM, 6); # S는 소켓핸들, 6은 TCP 방식
sort : 값들을 정렬한다.
  ex) @a = sort {$a <=> $b} keys %hash; #해시의 키를 오름차순으로 정렬해서 배열 @a에 담는다. $a와 $b의 자리를 바꾸면 내림차순이다.
unshift : shift와는 반대로, 배열의 값들을 뒤로 밀어 맨 앞에 새로운 값을 추가한다.
  ex) unshift @<배열명> 5; # 원래 배열에 1,2,3,4라는 값이 있었다면 5,1,2,3,4가 된다.
use : 라이브러리를 로드하며 오류검사를 하지 않는다. 매번 호출할 때마다 다시 파일을 읽어서 로드하므로 매번 라이브러리가 초기화된다. 컴파일 시점에서 모듈 실행, 로드한다.
  ex) use Socket; #Socket.pm 파일을 가져와 컴파일
values : 해시에서 키에 대응하는 값들만 뽑아낸다.
  ex) values %hash;

Perl -X 함수
용법 : -X <파일핸들> 또는 -X <파일 또는 디렉토리 이름>
-B : 이진 파일인지 여부
-d : 디렉토리인지 여부
-e : 파일의 존재 여부(있으면 1, 없으면 0)
-M : 파일 생성 후 경과한 일
-s  : 파일의 크기(바이트 단위)를 리턴
-T : 텍스트 파일인지 여부
-z : 파일 크기가 0인지 여부(0이면 1, 아니면 0)

Perl 정규표현
m// : 매치하는 문자열을 추출한다. //로 구분할 때에는 m을 생략해도 된다.
$url =~ m@://([^/]+)@ #첫번째 괄호 ( )에 매치되는 것은 $1에 들어간다.
my $server = $1