#!/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 "--------------------------";
'etc > 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 |