오늘은 마지막이네요.. 후후perl의 기초를 다지는데 많은 도움이 되었으면 합니다. 5.2. for
& foreach for 는 C 언어와 유사 하다. 그리고 foreach 구문은 어레이가 가장 잘 어울린다. ☞
간단한 예[root@chongnux perl]# cat foreach#!/usr/bin/perl$i = 0 ;$sum = 0;foreach $i (1..10) { $sum += $i;
print "$i"; if($i == 10) {last;} }[root@chongnux perl]# chmod +x foreach[root@chongnux perl]# ./foreach1234567
89106. Perl에서 리눅스 명령어 실행 몇가지의 방법으로 Perl에서 리눅스의 명령어를 실행 할
수 있다. ① system(LIST) : 리스트에서 쉘 명령을 실행한다. ② fork : 새로운 자식 프로세
스를 만든다. ③ exec(LIST) : 시스템 커멘드를 사용한다. ④ fork 와 exec 쉘의 이용. ☞ sys
tem명령의 사용 예[root@chongnux perl]# vi recmd#!/usr/bin/perl $prompt = "Command (or "exit"): ";print $prompt;
while(<STDIN>){ chop; if($_ eq "exit") { exit(0);} #호출된 시스템으로 명령을 실행한다. system $_; #
표준 입력라인 $_로 할당이 된다. unless($? == 0) { print "Error executing: $_";} #명령어 없는 경우
에러 처리 print $prompt;}[root@chongnux perl]# chmod +x recmd[root@chongnux perl]# ./recmdCommand (or "exit"): echo
$PATH/usr/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/alex99/binCommand (or "exit"): exit[root@chongnux perl]
# ♨ 내장 변수 변수 이름 | 의미 ___________________________________________________________
$$ 프로세스 종료 PID $? 최근 명령의 종료 값 $#
프로그램 전달 인수의 개수 $0 명령 수행시 명령의 이름을 기억하
는 변수 $1,... 명령에 전달된 전달 인수 하나 하나 $* 명
령에 전달된 전달 인수 $@ 전달 인수를 문자열의 목록(list)으로 표시 $!
마지막으로 실행된 백그라운드 프로세스 PID __________________________________________
___________________☞fork 와 exec 사용 예[root@chongnux perl]# cat recmd2#!/usr/bin/perl $prompt = "Command ("exit
" to quit): ";print $prompt; while (<STDIN>){ chop; if($_ eq "exit") { exit(0);} $status = fork; # 새로운
자식 프로세스를 생성한다. if($status) { wait; # 자식 프로세스가 종료되길 기다린다.
print $prompt; next; # 루프를 다시 시작한다. } else { exec $_; #명령을 실행 시켜 준다.
}}[root@chongnux perl]# chmod +x recmd2[root@chongnux perl]# ./recmdCommand (or "exit"): dfFilesystem
1k-blocks Used Available Use% Mounted on/dev/hda1 132703 91368 34483 73% //de
v/hda6 749316 16905 693706 2% /home/dev/hda5 1981000 891248
987341 47% /usrCommand (or "exit"): exit[root@chongnux perl]# 7. 파일 처리 정의되어 있는 파일
처리는 표준 입력 STDIN , 표준 출력 STDOUT , 에러 처리 STDERR 이 있다. *파일을 읽으려면 <> 괄
호를 사용한다. ☞ 간단한 파일 처리 스크립트. [root@chongnux perl]# cat output# 공표 요청을
하거나 또는 브라우즈 목록 동기화해 줄 대상:# 브라우져 제어 옵션:# 윈도우즈 인터넷 네
임 서비스 WINS 지원 섹션:[root@chongnux perl]# cat o_print#!/usr/bin/perl open ( PWDFILE,"/home/alex99/perl/smb
.conf");open ( RESULT,">output"); while(<PWDFILE>){ if($_ =~ /:/) { print RESULT $_ ;} #읽어 들인 화일 내용을
output에 입력한다.}close PWDFILE;close RESULT;[root@chongnux perl]# chmod +x o_print[root@chongnux perl]# ./o_prin
t[root@chongnux perl]# cat output# 공표 요청을 하거나 또는 브라우즈 목록 동기화해 줄 대상:# 브
라우져 제어 옵션:# 윈도우즈 인터넷 네임 서비스 WINS 지원 섹션:☞다음은 원하는 사람한테
메일 보는 스크립트[root@chongnux perl]# cat user_mailto#!/usr/bin/perl #사용자 리스트에 메일 보내
기. foreach("root" ,"shee"){ open(MAILPIPE,"|mail -s Greetings $_"); print MAILPIPE "Hi, my name is shee !"; clo
se MAILPIPE;} #|는 여기서 파이프 문자로 쓰였으며,, |시작하는 파일명으로 open 을 호출하면#
파일명의 나머지는 명령으로 처리된다. perl 해석기는 그 명령을 실행하고,#print 호출을 사
용하여 이명령을 전달할 수 있다. [root@chongnux perl]# chmod +x user_mailto[root@chongnux perl]# ./user_mai
lto +++ 메일을 확인해보면 메일이 간 것을 확인 할 수 있다. ☞ 새로운 예.[root@chongnux perl]#
cat pspipe#!/usr/bin/perl open(PSPIPE,"ps -ax |");while(<PSPIPE>){ print $_;} #파일명이 파이프 문자로 끝
나면 (|), 그 파일명은 명령으로서 실행된다.[root@chongnux perl]# ./pspipe PID TTY STAT TIME
COMMAND 1 ? S 0:04 init 2 ? SW 0:00 [kflushd] 3 ? SW
0:00 [kpiod] 4 ? SW 0:01 [kswapd] 중간 생략.... 6681 ? S
0:00 hanterm 6683 pts/3 S 0:00 -bash 6709 pts/2 S 0:00 perl ./pspipe 6710 pts/2 R
0:00 ps -ax[root@chongnux perl]#8. 서브루틴 서브루틴은 @_ 어레이에서 자신의 인자르 받는
다. 서브루틴의 변수는 글로벌이며, local 함수를 이용 local 변수를 사용한다. 서브루틴 함
수의 호출은 &를 사용해서 호출을 한다. [root@chongnux perl]# cat sub1#!/usr/bin/perl sub hello{ # @ ar
ray 에서 인자의 로컬 카피를 만든다. local($first,$last) = @_; print "Hello, $first $last";} $a =
shee;$b = alex99; &hello($a,$b); #서브루틴의 호출은 &를 사용한다. 인자는 $a ,$b 이다. [root@chongnu
x perl]# ./sub1Hello, shee alex99☞ C 언어의 헤더화일처럼 서브함수를 만들어 놓은 다음 호출하여
사용할 수 있다. [root@chongnux perl]# vi choice_counter#!/usr/bin/perl require 'counter.pl'; #서부루틴 정
의 파일 포함.$ini = 1; restart:print "Enter one number("q" is to quit): "; $num = <STDIN>;chop;if($num == "q"){ex
it(0);} &counter($ini,$num); #서브루틴을 호출 할 때 &기호를 사용한다. goto restart; [root@chongnux pe
rl]# vi counter.plsub counter{ local($first,$last) =@_; #로컬이자를 선언... 인자가 2개인 경우는 @_
를 사용한다. for($int = $first ; $int <= $last ; $int++) { print "count_$int";}}1; #반드시 이것
을 해주어야 하다. 복귀값이 있어야 실행이 된다. [root@chongnux perl]# ./choice_counterEnter one number
("q" is to quit): 3count_1count_2count_3Enter one number("q" is to quit): q[root@chongnux perl]# 이것이 마지
막입니다. 후후... 정말 활용할 것이 많은 것 같습니다. 차근 차근 실력을 쌓아 나간다면 언
젠가는 리눅스 전문가가 될지도... 시시 하다구요. 잘만 이용 한다면 많은 득이 되실 겁니
다.