Android
2013.08.13 18:14

Perl 정리 요약

조회 수 14981 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print

출처:
http://blog.empas.com/wjsdhtn/26820847

 

목 차

머릿말

1 Perl 언어의 개요

1. 개요
2. Perl
의 특징

2 Perl 언어의 문법

1. 간단한 예제(Hello world!)
2. 기본형
3.
변수
4.
배열
5.
입출력문
6.
제어문, 조건문
7.
정규표현식
8.
문자의 대용과 변환
9.
기본함수
10.
결합배열
11.
서브루틴

3 Perl 프로그래밍 활용

1. 사용자 정보
2.
계산기
3.
디스크사용량 정보
4.
전화번호 검색
5.
성적평가





1 Perl 언어의 개요

1.
개요

Practical Extraction and Report Language
-
Larry Wall (lwall@netlabs.com) 고안해낸, 파일로 부터 데이타의 추출과 변환을 쉽게 구현할수있는
C, awk, sed, sh
장점들을 취한 프로그래밍언어이다.

- UNIX, Mac, Amiga, OS/2, VMS, MS-DOS, Windows95
등의 다양한 운영체제에서 사용가능하며 현재
버전5까지 배포되어있다.


2. Perl
특징

인터프리터
-
실용적 (편이성, 능률성, 완벽한구조)이며, 실행되기위한 데이타의 크기에 제한이 없다.
패턴매칭테크닉이 탁월하며, 다른 언어의 스크립트와 바이너리를 모두취급할수있다.
- 97
4월현재PERL 컴파일러 aplha3버전까지 배포되었으며, 향후 인터프리터형식과 함께
존재할것이다.

C + sed + awk + sh = "Perl"
-
아래의 언어의 장점들을 포함한것이 PERL 이다.
C (
제어, 수치, I/O, 시스템호출)
sed (
대용, 변환)
awk (
삽입, 계산, 리스트, 처리)
sh (
문자열, 결합, 사이클시간)

Perl vs C 언어
-
거의 동일한 문법구조이며, 일반적으로 동일한 C 프로그램보다 느리다.





2 Perl 언어의 문법

1.
간단한 예제( Hello world! )

프로그램
-
다음을 vi, emacs, pico등의 에디터로 작성한다.

#!/usr/local/bin/perl
# Perl example<1> - hello world : hello.pl
#---------------------------

print 'Hello world!\n'; #statement line

#end of file



해설
- #!/usr/local/bin/perl
: Perl
프로그램의 경로(Full Path)지정
:
스크립트(Script) 수행될때 (Shell) 아닌 지정된 Perl프로그램에 의해 수행된다.

- # Perl example<1> - hello world : hello.pl
#---------------------------
#statement line
#end of file
:
주석(comment), 수행되지않는 부분
: '#'
심볼로 시작되는 해당라인은 수행시 무시

- print 'Hello world!\n';
:
수행되는 문장
: '\n'
개행(newline) 특수문자
:
라인의 끝은 세미콜론(;)으로 끝난다.

프로그램 실행
-
해당파일(exam.pl) 허가권을 조정한다.
: %chmod u+x hello.pl

-
실행
: %perl hello.pl
또는 %hello.pl


2.
기본형

수치
-
정수형 : 0, 3, -100, -8
-
실수형 : 1.0, 7.653, -6.30, 10e23
- 8
진수 : 0765, 0123 (0으로 시작)
- 16
진수 : 0x268, 0x111 (0x 시작)

문자와 문자열
- Single quote
'Hello' : 5
문자 h, e, l, l, o
- Double qoute
"Hello World!\n" :
문자열 Hello World! 개행

연산자
-
산술연산자 : C 언어와 동일
-
비교연산자
내용 수치비교 스트링비교
Equal == eq
Not equal != ne
Less Than < lt
Greater Than > gt
Less Than or Equal to <- le
Greater Than or Equal to >- ge

-
연산자 우선순위
좌측결합 변수, 리스트연산자(좌측)
좌측결합 ->
- ++ --
우측결합 **
우측결합 ! ~ \ and unary + and -
좌측결합 =~ !~
좌측결합 * / % x
좌측결합 + - .
좌측결합 << >>
- named unary operators
- < > <= >= lt gt le ge
- == != <=> eq ne cmp
좌측결합 &
좌측결합 | ^
좌측결합 &&
좌측결합 ||
- ..
우측결합 ?:
우측결합 = += -= *= etc.
좌측결합 , =>
-
리스트 연산자 (우측)
좌측결합 not
좌측결합 and
좌측결합 or xor


3.
변수
스칼라 변수
-
변수선언이 없다.
-
형식 :
'$'
시작되며 문자와 숫자, 밑줄문자(_) 뒤에 올수있다.
-
대문자와 소문자의 구별 ($a != $A), case sensitive
산술연산
-
변수선언이 없다.
- C
언어의 산술연산식과 동일하다.
$a=1;
$b=$a+1;
$b++;
$c=$b;
$c+=$a;
-
예제

#!/usr/local/bin/perl
# scalar variable example (1)

$a = 34; #
정수형 상수 34 $a 치환
$b = 5; # $b
$a 치환
$sum = $a + $b; # $a
$b 더한값을 $sum 치환
print "SUM = $a + $b = $sum\n";

$a = $a + 1; # $a
1더한값을 $a 치환
$b += 1; # $b
1더한값을 $b 치환
print "Increased A = $a , B = $b\n";



문자열
-
문자열의 선언없이 변수가 쓰인다.
$d="abcdefg";
$e="hijklmn";
-
예제

#!/usr/local/bin/perl
# scalar variable example (2)
$a_string = "Don\'t worry"; # Don't worry
$a_string 치환
$b_string = "Be happy!"; # Be happy
$b_string 치환

print "RESULT : $a_string and $b_string\n";
# print
문의 수행 결과-> Don't worry and Be happy!



기타
-
숫자와 문자의 추가(append)연산
'.' :
추가
'x' :
반복 (형식 : $L_string = $R_string x $number )

$f=$d.$e;
$d.=$e;
-
예제 (1)

#!/usr/local/bin/perl
# scalar variable example (3)
#-------- Numeric
$a = 12;
$b = 0;
$a .= $b; # $a
$b 내용을 추가, $a = 120
print "APPEND B onto A = $a\n";

#-------- String
$a_string = 'Hong';
$b_string = ' Gil-Dong';
$c_string = $a_string . $b_string;
# $a_string
$b_string 연결하여 $c_string 치환
#
, Hong Gil-Dong
print "CONCATENATE String: $c_string\n";

$repeat = 3;
$d_string = $a_string x $repeat;
# $a_string
3 반복하여 $d_string 치환
pring "REPEAT $repeat times : $d_string\n";



-
예제 (2)

#!/usr/local/bin/perl
print '007',' has been portrayed by at least ', 004, ' actors. ';
print 7+3, ' ', 7*3, ' ', 7/3, ' ', 7%3, ' ', 7**3, ' ';
$x = 7;
print $x;
print ' Doesn\'t resolve variables like $x and backslashes \n. ';
print "Does resolve $x and backslash\n";
$y = "A line containing $x and ending with line feed.\n";
print $y;
$y = "Con" . "cat" . "enation!\n";
print $y;



< 출력 결과 >
007 has been portrayed by at least 4 actors. 10 21
2.3333333333333335 1 343 7
Doesn't resolve variables like $x and backslashes \n. Does
resolve 7 and backslash
A line containing 7 and ending with line feed.
Concatenation!


4.
배열
배열
-
데이타의 리스트
-
형식 :
'@'
시작되며 문자와 숫자, 밑줄문자(_) 뒤에 올수있다.
-
대문자와 소문자의 구별 (@a != @A), case sensitive
-
스칼라변수와의 구별 ($a != @a)
데이타의 리스트
-
데이타 : $a[0], $a[1], $a[2], ... ,$a[n]
리스트 : @a == ($a[0], $a[1], $a[2], ... ,$a[n])
$n[0]=23;
$n[1]="abc;
@n=(23,"abc");
@n=($a,$b,$c);
($a,$b,$c)=(1,2,3);
-
예제

#!/usr/local/bin/perl
# array example (1)
@a = (1,2,3); # @a
1,2,3 저장 # $a[0] = 1; $a[1] = 2; $a[2] = 3; 동일
print "Array value : @a\n";
print "Scalar value : $a[0] , $a[1] , $a[2]\n";


@string = ("Don\'t worry","Be happy!");
# @string
Don't worry Be happy 저장
# $string[0] = "Dont\t worry"; $string[1] = "Be
# happy!";
동일
print "Array value : @string\n";
print "Scalar value : $string[0] , $string[1]\n";



데이타의
-
배열에 저장되는 데이타의 (type) 관계없다.
-
배열의 수정

#!/usr/local/bin/perl
# array example (2)
@b = (1,"two"); # $b[0] = 1; $b[1] = "two";
동일
print "Array value : @b\n";
print "Scalar value : $b[0] , $b[1]\n";
$b[0]++;
# $b[0]
값을 1만큼 증가
# 따라서, @b = (2, "two")
print "Array value : @b\n";
print "Scalar value : $b[0] , $b[1]\n";

$b[0] = "one"; #
수정-> @b = ("one","two")
print "Array value : @b\n";
print "Scalar value : $b[0] , $b[1]\n";


삽입과 삭제
-
배열의 삽입

#!/usr/local/bin/perl
# array example (3)
@name = ("Kim", "Lee", "Park");
print "NAME : @name\n";

@name_plus = ("Jeong", @name, "Kang");
# @name_plus=("Jeong", "Kim", "Lee", "Park", "Kang");
#
동일
print "NAME_PULSE : @name_plus\n";



- 배열의 PUSH, POP
PUSH :
배열의 마지막 데이타로 추가한다.
POP :
배열의 마지막 데이타를 가져온다.

#!/usr/local/bin/perl
# array example (2)
@food = ("apples", "pears", "eels");
pint "FOOD : @food\n";

push(@food, "eggs","banana");
#
데이타 eggs, banana 배열 @food Push한다.
# @food=("apples", "pears", "eels", "eggs","banana");
#
동일한 결과
print "FOOD + eggs + banana : @food\n";

$food_item1 = pop(@food);
# @food
마지막 데이타(banana) $food_item1
# Pop
한다.
# @food = ("apples", "pears", "eels", "eggs");
#
동일한 결과
print "FOOD : @food , ITEM1 : $food_item1\n");


기타
-
배열의 길이계산 : $length = @array;
-
배열의 데이타 -> 문자열 : $string = "@array";
-
배열의 다중치환
($a, $b) = @array;
# @array
처음 2개의 데이타가 $a $b 각각 치환된다.
($a, @b_array) = @array;
# @array
처음 데이타가 $a, 나머지 데이타가
# @b_array
각각 치환된다.


5.
입출력문
표준 입출력
-
입력 : , open(INPUT, '-')
$line=;
chop($line);
$line=~tr/a-z/A-Z/; print "$line\n";

chop($line=);
$line=~tr/a-z/A-Z/; print "$line\n";

$_=; chop;
tr/a-z/A-Z/; print "$_\n";

while(){
chop;
tr/a-z/A-Z/; print "$_\n";
}

@n=;
foreach (@n){
chop;
tr/a-z/A-Z/; print "$_\n";
}
-
출력 : print, open(OUTPUT, '>-')
print "Hi";
print "Hi\n";
print "This is line 1\nThis is line 2\n";

$first="Dave"; $last="Molta";
$name="$first $last";
$name=$first." ".$last;
$name.=" III";
print "My boss's name is $name.\n";
print 'The variable $name holds '.$name."\n";
print 'His name is stored in the variable name $name.'."\n";
print "1\t2\t3\t4\t5\n";

printf("%s %s\n",$name,$date);
$namedate=sprintf("%s %s\n",$name,$date);

-
예제 (1)


#!/usr/local/bin/perl
# standard i/o example(1)
print "Input : ";
$agv = ;
print "$agv";



-
예제 (1)

#!/usr/local/bin/perl
# standard i/o example(2)
print STDOUT "Tell me something: ";
while ($input = ) {
print STDOUT "You said, quote: $input endquote\n";
chop $input;
print STDOUT "Without the newline: $input endquote\n";
if ($input eq '') { print STDERR "Null input!\n"; }
print STDOUT "Tell me more, or ^D to end:\n";
}
print STDOUT "That's all!\n";



파일 입출력
-
입력
open(INPUT, $file);
open(INPUT, "<$file");
-
출력
open(OUTPUT, ">$file");
open(OUTPUT, ">>$file");

open(MYOUT,">myoutputfile.txt");
print MYOUT "Hello.\n";
close(MYOUT);

open(MYFILE,"){
chop;
tr/a-z/A-Z/; print "$_\n";
}

while(<>){
chop;
tr/a-z/A-Z/; print "$_\n";
}

while(){
chop;
tr/a-z/A-Z/; print "$_\n";
}

-



#!/usr/local/bin/perl
# file i/o example
# program to open the passwd file
$file='/etc/passwd';
#
유닉스에서의 패스워드파일 설정
open(INFO, $file); #
파일열기(입력옵션)
@lines=; #
파일의 끝까지 배열 @line 저장
close(INFO); #
파일닫기
print @lines; # @line
내용을 화면에 출력



입출력문 예제
-
유닉스에서의 cat과같은 동작을 하는 프로그램을 작성하여라.
-
표준입력으로 파일이름(test.cat) 입력
-
파일입력으로 해당파일의 내용을 배열 @lines 저장
-
표준출력으로 @lines 출력
- test.cat
파일내용, (계속 사용될 파일임)
aaaabcaaaaaaaaaaaa
bbbb

dddddabcdddddddddddddabcddddddddddddddd
eeeeeeabc

gggggggggggggggggg
-
프로그램

#!/usr/local/bin/perl
# cat program
print "Input file name : ";
$file = ;
chop $file;
#
입력된 변수 $file 개행(newline)문자 제거
open(INFO, "$file") || die "\"$file"\" : $!\n";
#
파일열기(입력옵션)
# die :
파일이 없을시 오류메세지 출력
@lines=;
#
파일의 끝까지 배열 @line 저장
close(INFO); #
파일닫기
print @lines; # @line
내용을 화면에 출력



6.
제어문, 조건문
for
-
형식
for(
초기값 ; 테스트 ; 증가식)
{
문장1;
문장2;
}

for($i=0; $i<2; $i++)
{print $n[$i];}

-
예제 (1부터 10까지 표준출력)
for ($i = 0 ; $i < 10 ; ++$i)
{
print "$i\n";
}
foreach
- foreach
{ }안에서 변수의 처리
-
형식
foreach
변수 ()
{
문장1;
문장2;
}

@n=(1,2);
foreach $i (0..1) {print $n[$i];}
foreach $i (@n) {print $i;}
foreach (@n) {print $_;}
foreach (@n) {print;}

-
예제
@array = ("1","b","c","d");
foreach $item (@array)
# @array
데이타가 $item 하나씩 치환된다.
{
print "$item : ";
$item = $item . 100;
# $item
100 추가(append)
print "$item\n";
}
while , do while
- while

-
형식
while (
테스트)
{
문장1;
문장2;
}

$i=0;
while ($i<2)
{print $n[$i];
$i++;}

-
예제 (입력스트링이 test일때까지 반복수행)
print "Input string : ";
$input=>;
chop $input;
while($input ne "test")
{
print "\tsorry, again? ";
# \t : TAB
키의 특수문자
$input=;
chop $input;
}
- do while

-
형식
do
{
문장1;
문장2;
} while (
테스트)
-
예제 (입력스트링이 test일때까지 반복수행)
do
{
print "Input string : ";
$input=;
chop $input;
} while($input ne "test")
if
-
형식
if(
조건식)
{
문장; }
else
{
문장; }

if(
조건식1)
{
문장; }
elsif(
조건식2)
{
문장; }
elsif(
조건식3)
{
문장; }

if($a eq "hello"){$z="goodbye";}
else{$z="bye";}

if($a == 2){$z=$a+1;}

if($a = 1){$z=$a+1;} #Wrong!

-
예제
print "Input Chracter : ";
$input=;
chop $input;
if(!$input) #
입력스트링이 공백이었을때
{ print "empty!!!\n"; }
elsif(length($input) == 1 )
# length() :
스트링의 길이를 계산
{ print " 1 character.\n"; }
elsif(length($input) == 2 )
{ print " 2 chracter.\n"; }
else
{ print "a lot of character.\n"; }

제어문, 조건문 예제
- 5.
입출력문(입출력문 예제)에서 제시된 프로그램(cat
프로그램)에서 출력시 라인번호를 함께 출력하는 프로그램을
작성하여라.
-
출력
1 : aaaabcaaaaaaaaaaaa
2 : bbbb
3 :
4 : dddddabcdddddddddddddabcddddddddddddddd
5 : eeeeeeabc
6 :
7 : gggggggggggggggggg
-
프로그램


#!/usr/local/bin/perl
# cat program + line number
print "Input file name : ";
$file = ;
chop $file;
#
입력된 변수 $file 개행(newline)문자 제거
$count = 1; #
라인번호 초기화
open(INFO, $file);
while($line = ) #
라인단위로 $line 입력받음
{
print "$count : $line";
++$count;
}
close(INFO);



7.
정규표현식
간단한 예제
-
표준입력으로 받은 스트링에 "test" 있으면 문장을
수행하는 프로그램

#!/usr/local/bin/perl
while(<>)
{
if(/test/)
{ print "exist \"test\"!!!\n"; }
}



해설
- while(<>) : while($_ = )
동일
- if(/test/)
:
정규표현은 슬레쉬(/)사이에 쓰여진다.
:
변수명을 지정하지 않을경우 기본변수인 $_ 비교한다.
: if($_ =~ /test/)
동등
:
입력스트링중에 test 포함되어있을경우 { } 수행
-
동작
:
입력에 "This is a tes t!!!" 일경우 { } 수행하지 않음
:
입력에 "This is a test!!!" 경우 { } 수행
정규표현식
-
강력한 표현능력
-
슬레쉬(/)사이에 쓰여진다.
-
표현
. #
개행(newline) 제외한 한문자
^ #
라인또는 스트링의 시작
$ #
라인또는 스트링의
* # 0
또는 여러개의 문자
+ # 1
또는 여러개의 문자
? # 0
또는 1개의 문자
-
표현예
t.e
# t
e사이의 어떤 한문자가 들어간 스트링
# the, toe, tre
등등
^ftp # ftp
라인의 시작인 스트링
es$ # es
라인의 끝인 스트링
und*
# un
다음에 0또는 d 여러개 나오는 문자
# un
# und
# undd
# unddd
등등
.* #
개행없는 스트링
^$ #
공백 라인
정규표현식 옵션
- '['
']'사이에서 표현된다.
- '-' :
사이(Between) 의미
- '^' : Not
의미
- '|' :
또는(Or) 의미
- '()' :
그룹을 의미
-
표현식 옵션예
[qjk] # q
또는 j또는 k
[^qjk] # q
또는 j또는 k 제외
[a-z] #
소문자중의 하나
[^a-z] #
소문자는 제외한
[a-zA-Z]#
소문자, 대문자중의 하나
[a-z]+ #
최소 하나의 소문자를 포함한 소문자스트링
kim|lee # kim
또는 lee
(eg|le)gs # eggs
또는 legs
(da)+ # da
또는 dada 또는 dadada 등등
특수문자와 그외
\n #
개행
\t # tab
\w #
알파벳 문자
#
정규표현 [a-zA-Z0-9_] 동일
\W #
알파벳 문자가 아닌 문자
#
정규표현 [^a-zA-Z0-9_] 동일
\d #
숫자, 정규표현 [0-9] 동일
\D #
숫자가아닌 문자, 정규표현 [^0-9] 동일
\s #
공백문자
\S #
공백문자가 아닌 문자

\| # '|'
\[ # '['
\) # ')'
\* # '*'
\^ # '^'
\/ # '/'
\\ # '\'
정규표현에서의 비교
- Equal : =~
- Nont Equal : !~

$n=~/\smyfile=(\S+)\s/;

if($n=~/\smyfile=(\S+)\s/){$myfile=$1;}

$n=~/^(\S+)\s+(\S)$/;

while(<>){
chop;
/^(\S+)\s+(\S+)$/;
print "$2\t$1\n";
}

if(/mystring/){$x=1;}

if($line=~/mystring/){$x=1;}

if($line!~/mystring/){$x=1;}

/file=(\w+\s)/;
$file=$1;

if(/file=(\w+)\s/){$file=$1;}
-



#!/usr/local/bin/perl
$a = "This is a pen!";
$b = "I'm a boy.";
if ($a =~ /is/)
{ print "exist \"is\"!!!\n"; }
if ($b !~ /am/)
{ print "Not exist \"am\"!!!\n"; }



정규표현식 예제
- 6.
제어문, 조건문(제어문, 조건문 예제)에서 제시된 프로그램(cat
프로그램)에서 출력시 라인번호를 함께 출력하는 프로그램을
작성하되 공백라인은 출력하지말것.
-
출력
1 : aaaabcaaaaaaaaaaaa
2 : bbbb
3 : dddddabcdddddddddddddabcddddddddddddddd
4 : eeeeeeabc
5 : gggggggggggggggggg
-
프로그램


#!/usr/local/bin/perl
# cat program + line number + NO empty line
print "Input file name : ";
$file = ;
chop $file;
#
입력된 변수 $file 개행(newline)문자 제거
$count = 1; #
라인번호 초기화
open(INFO, $file);
while($line = #
라인단위로 $line 입력받음
{
if( $line !~ /^$/) #
정규표현 ^$ 공백라인
#
공백라인이 아닌경우 { } 수행
{
print "$count : $line";
++$count;
}
}
close(INFO);




8.
문자의 대용과 변환
seoul SEOUL 대용
- s
함수사용 : s/(대용할 문자)/(대용될 문자)/(옵션)
-
슬레쉬(/)사이에서 정규표현이 사용될수있다.
- $string =~ s/seoul/SEOUL/;
변수 $string 저장된 문자열의 첫번째 seoul SEOUL
대용한다.

#!/usr/local/bin/perl
$string = "seoul, seoul, seoul, korea";
$string =~ s/seoul/SEOUL/;
print "$string\n";
#
출력은 SEOUL, seoul, seoul, korea 된다.



옵션
-
마지막 슬레쉬(/)뒤에 옵션을 넣을수 있다.
- g
옵션 : 해당 문자열의 전체적인 대용을 한다.
- $string =~ s/seoul/SEOUL/g;

#!/usr/local/bin/perl
$string = "seoul, seoul, seoul, korea";
$string =~ s/seoul/SEOUL/g; #
전체적 대용
print "$string\n";
#
출력은 SEOUL, SEOUL, SEOUL, korea 된다.



- i
옵션 : 대문자, 소문자무시
- $string =~ s/SeouL/SEOUL/i;
-
정규표현 : $string =~ s/[Ss][Ee][Oo][Uu][Ll]/SEOUL/;

#!/usr/local/bin/perl
$string = "seoul, seoul, seoul, korea";
$string =~ s/SeouL/SEOUL/gi;
#
대소문자무시, 전체적 대용
print "$string\n";
#
출력은 SEOUL, SEOUL, SEOUL, korea 된다.



문자의 대용예제
- 7.
정규표현식(정규표현식 예제)에서 제시된 프로그램에서
소스파일(test.cat) 내용중 abc 들어간 문자를
대용하여 출력하는 프로그램을 작성하라.
-
출력
1 : aaaaaaaaaaaaaaa
2 : bbbb
3 : ddddddddddddddddddddddddddddddddd
4 : eeeeee

5 : gggggggggggggggggg
-
프로그램


#!/usr/local/bin/perl
# cat program + line number + NO empty line + replace
print "Input file name : ";
$file = ;
chop $file;
#
입력된 변수 $file 개행(newline)문자 제거
$count = 1; #
라인번호 초기화
open(INFO, $file);
while($line = ) #
라인단위로 $line 입력받음
{
if( ($line !~ /^$/) && ($line =~ s/abc/\/g) )
#
정규표현 ^$ 공백라인
# abc
전체적으로 대용
#
공백라인이 아닌경우 { } 수행
{
print "$count : $line";
++$count;
}
}
close(INFO);



대문자를 소문자로 변환
- tr
함수사용 : s/(변환할 문자)/(변환될 문자)/
-
슬레쉬(/)사이에서의 특수정규표현은 사용될수없다. (, 사이를
의미하는 '-' 가능)
-
문자 문자로 변환
: tr/abc/def/;
: a
d, b e, c f 변환된다.

$m=~tr/abcdefghiklmnoprstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/;
$m=~tr/a-z/A-Z/;
- $string =~ tr/ A-Z/a-z/;

#!/usr/local/bin/perl
print "Input string : ";
$string=;
chop $string;
#
입력된 변수 $string 개행(newline)문자 제거
$count = ($string =~ tr/A-Z/a-z/);
#
대문자를 소문자로 변환
#
변환된 문자의 갯수를 $count 치환
print "$count numbered : $string\n";



9.
기본 함수
split( )
-
형식 : (배열) = split( /(구분문자)/, (스트링) )
-
해당 스트링을 배열로 나눔
- (
스트링) 지정되지 않을경우 기본변수($_) 처리한다.
-
정규표현이 사용될수있다.
chop($n=);
@n=split(/ /,$n);
@n=split(/,/,$n);
@n=split(/\t/,$n);
@n=split(/\s+/,$n);
@n=split(/\s+0*/,$n);
($first,$middle,$last)=split(/\s+/,$n);

-
간단한 예제(1)


#!/usr/local/bin/perl
# split() example (1)
$string = "Hong Gil-Dong::Male::19::Korea";
@array = split(/::/, $string);
# $string
내용을 '::' 구분하여 배열 @array 저장
# @array = ("Hong Gil-Dong","Male","19","Korea");
#
동일
print "$string = @array\n";



-
위의 예제에서,
$string = "Hong Gil-Dong::Male:::19:Korea";
경우
@array = "Hong il-Dong","","Male","","","19","Korea");
동일
-
간단한 예제(2) : 정규표현사용

#!/usr/local/bin/perl
# split() example (2)
$string = "Hong Gil-Dong::Male:::19:Korea";
@array = split(/:+/, $string);
#
정규표현 /:+/ ':' 한번또는 여러번 나오는 문자를
#
의미
# $string
내용을 ':' 또는 '::' 또는 ':::' ..
# '::::::'
등으로 구분하여 배열 @array 저장
# @array = ("Hong Gil-Dong","Male","19","Korea");
#
동일
print "$string = @array\n";



join( )
-
형식 : (스트링) = join( "(연결문자)", (배열) )
-
해당 배열을 스트링으로 연결

@n=(1,2,3,4,5);
$n=join(" ",@n);
print "$n\n"; #Gives 1 2 3 4 5

$n=join("\t",@n);
print "$n\n"; #Gives 1 2 ...

$n=join(",",@n);
print "$n\n"; #Gives 1,2,3,4,5
-
간단한 예제(1)

#!/usr/local/bin/perl
# join() example (1)
$string =join(":::","This","is","a","join","function");
# $string = "This:::is:::a:::join:::function"
동일
print "$string\n";



-
간단한 예제(2)

#!/usr/local/bin/perl
# join() example (2)
@array = ("Hong Gil-Dong","Male","19","Korea");
$string = join("::", @array);
# $string = "Hong Gil-Dong::Male::19::Korea";
동일
print "$string\n";



-
간단한 예제(3)

#!/usr/local/bin/perl
# join() example (3)
@stuff = ('This', 'is', 'a', 'list.');
print "Lists and strings are indexed from 0.\n";
print "So \$stuff[1] = $stuff[1], ",
"and \$#stuff = $#stuff.\n";
#
베열 @stuff 두번째 데이타인 "is" 출력한다.
print @stuff,"\n";
print join('...',@stuff),"\n";
splice(@stuff, 3, 0, ('fine', 'little'));
#
배열 @stuff 4번째 부터 "fine" "little" 차례로 삽입
print join('...',@stuff),"\n";
#
배열 @stuff "..." join하여 출력



<
출력 결과>
Lists and strings are indexed from 0.
So $stuff[1] = is, and $#stuff = 3.
Thisisalist.
This...is...a...list.
This...is...a...fine...little...list.

substr( )
-
형식 : (스트링) = substr((스트링), 시작, 길이);
-
해당 스트링에서