#!/usr/bin/perl


#경고를 보여준다 (주석 해제 이후 사용)

#use warnings;


#정의 되지 않는 변수를 변형하여 사용하는 것을 막는다.

#일반적으로 my 지정한 이후 사용해야 한다.

#use strict;


#특정 버전에 기능을 추가하여 사용하도록 한다.

# use 5.010 ==> 5.10버전과 동일함.

# state 구문을 사용 있음.

# 배열, 해쉬는 사용 불가 ! 변수만 사용 가능함.

use 5.010;


#사용자 정의 함수

# return 라인 끝에 리턴할 값을 넣어준다.


my $n;

sub func_test{

$n+=10;

}

my $result = &func_test;

print $result,"\n";



#사용자 정의 함수

# 입력 파라미터 사용하기

# $_[숫자] 활용한다

sub max1{

if($_[0]>=$_[1]){

$_[0];

}else{

$_[1];

}

}

print &max1(3,7),"\n";


# lexical variable : 어휘 변수(블럭 내부에서만 사용가능)

# my, @_ 활용

# ( 사용하면 목록 , 미사용 시는 스칼라 형임에 유의


sub max2{

my($n, $m) = @_;

if($n>=$m){$n}else{$m}

}

print max2(5,1),"\n";


#함수 입력 파라미터 점검

sub max3{

if(@_!=2){

print "warning ! &max3 should get exactly two arguments!\n";

}

my($n, $m) = @_;

if($n>=$m){$n}else{$m}

}

print max3(1,2,3),"\n";


# 낳은 max루틴

sub max{

my($input) = shift @_;

if($input==undef){

print "warning ! no inputs!\n";

}

foreach(@_){

if($_>$input){

$input = $_;

}

}

$input;

}


print "max : ".&max(1,30,8),"\n";



#return 활용

#원하는 값을 찾으면 조기 반환 처리

sub find_word{

my($word, @list) = @_;

foreach(0..$#list){

if($word eq $list[$_]){

return $_;

}

}

-1;

}

my @sample = qw!help wow grand!;

print "find_word : ".$sample[&find_word("wow",@sample)],"\n";


#함수의 활용

# & 또는 () 생략할 있다.

# 내장함수와 함수명이 동일한 경우 내장 함수를 호출하므로 & 사용하는 것을 권장함.

print "find_word : ".$sample[find_word("wow",@sample)],"\n";

print "find_word : ".$sample[find_word"wow",@sample],"\n";


#state활용

# strict 사용시 global변수를 사용할 없는 경우에 사용됨.

# use 5.010 써야 사용할 있음에 유의.

# 현재는 변수에서만 사용가능 ! 배열, 해쉬 사용 불가함.

sub print_test{

state $k+=1;

}


print &print_test,"\n";

print &print_test,"\n";

print &print_test,"\n";



#say 자동 줄바꿈이 포함됨.

#누적 연산 예제

sub print_sum{

state $sum = 0;

state @numbers;

push(@numbers,@_);

foreach(@numbers){

$sum+=$_;

}

say "list is (@numbers) : $sum";

}


&print_sum(1..3);

&print_sum(5..6);



#!/usr/bin/perl


#경고를 보여준다 (주석 해제 이후 사용)

#use warnings;


#정의 되지 않는 변수를 변형하여 사용하는 것을 막는다.

#일반적으로 my 지정한 이후 사용해야 한다.

#use strict;


#특정 버전에 기능을 추가하여 사용하도록 한다.

# use 5.010 ==> 5.10버전과 동일함.

# state 구문을 사용 있음.

# 배열, 해쉬는 사용 불가 ! 변수만 사용 가능함.

use 5.010;


#1에서 부터 100까지 더하는 사용자 함수

sub sum1to100{

my $sum;

foreach(1..100){

$sum+=$_;

}

say "sum 1 to 100 : $sum";

}

sum1to100();


#목록값을 입력 받아 평균보다 값을 출력하는 함수

sub above_average{

my $sum , $avg;

foreach(@_){

$sum+=$_;

}

$avg = $sum / @_;

my @result = ($sum,$avg);

foreach(@_){

if($_>$avg){

push(@result,$_);

}

}

@result;

}


my @real = 1..10;

my @result = above_average(@real);

my $sum = shift @result;

my $avg = shift @result;


say "--------------------------";

say "real : @real";

say "sum : $sum";

say "avg : $avg";

say "above list : @result";

say "--------------------------";

'기타 > Old' 카테고리의 다른 글

[perl] 6. hash  (0) 2011.02.24
[Perl] 5. 입력과 출력  (0) 2011.02.24
[Perl] 3장 목록과 배열  (0) 2011.02.15
[Perl] step 2 . ex  (0) 2011.02.15
[perl] 2일차 : 기본 입출력  (0) 2011.02.15

+ Recent posts