Declare
sub hyphenate {
my $word = shift @_ ; # 배열의 첫째 원소를 추출하고 나머지는 무시한다
$word = join "-", map { substr $word, $_ , 1 } ( 0 .. (length $word ) - 1);
return $word ;
}
|
- 서브루틴은 sub 예약어로 선언한다.
- 전달된 인자는 내장배열변수 @_ 로 접근할 수 있다.
- 사용자 정의 서브루틴은 항상 스칼라 리스트 (내장배열변수 @_ ) 를 입력으로 받는다.
입력으로 받는 리스트는 물론 원소가 하나만일 수도 있고 아예 없을 수도 있다.
배열이나 단일 스칼라 데이터는 내부에 저장되어 있는 1배의 리스트로 받는다.
하나의 해시 데이터는 2배 크기의 리스트로 받는다.
- 괄호는 옵션이지만, 서브루틴은 비록 인자가 없을지라도 괄호를 이용하는 것이 좋다.
서브루틴 호출이라는 것을 명확히 할 수 있기 때문이다.
- 서브루틴 호출시 사용하는 & 는 옵션이지만 내장 함수와 이름이 겹치면
내장 함수가 호출되므로 사용하자.
- return 예약어를 사용하지 않아도 마지막 값을 리턴한다.
명시적으로 return 을 사용해 주는 것이 좋다.
Unpacking arguments
어떤 사람들은 인자를 받지 않고 @_를 그대로 사용한다.
이런 방법은 지저분해서 권장하지 않는 방식이다.
sub left_pad {
my $newString = ( $_ [2] x ( $_ [1] - length $_ [0] ) ) . $_ [0];
return $newString ;
}
|
인덱스로 접근해서 값을 꺼내는 것은 조금 더 낫다.
sub left_pad {
my $oldString = $_ [0];
my $width = $_ [1];
my $padChar = $_ [2];
my $newString = ( $padChar x ( $width - length $oldString )) . $oldString;
return $newString ;
}
print &left_pad( "hello", 10 , "+"); # "+++++hello"
|
인자가 4개 이내면 shift 를 이용해서 꺼내는 방법이 추천된다.
sub left_pad {
my $oldString = shift @_ ;
my $width = shift @_ ;
my $padChar = shift @_ ;
my $newString = ( $padChar x ( $width - length $oldString )) . $oldString;
return $newString ;
}
print &left_pad( "hello", 10 , "+"); # "+++++hello"
|
shift 함수에 아무런 배열이 주어지지 않으면 묵시적으로 @_ 를 대상으로 작업한다.
즉 아래와 같은 방식이 되는데 자주 사용하는 방식이다.
subleft_pad{
my $oldString = shift;
my $width = shift;
my $padChar = shift;
my $newString = ( $padChar x ( $width - length $oldString )) . $oldString;
return $newString ;
}
print &left_pad( "hello", 10 , "+"); # "+++++hello"
|
혹은 스칼라 대입문을 사용해 한꺼번에 @_ 를 풀수도 있다.
sub left_pad {
my ($oldString, $width , $ padChar) = @_;
my $newString = ($padChar x ($ width - length $oldString )) . $oldString;
return $newString ;
}
print &left_pad( "hello", 10 , "+"); # "+++++hello"
|
해시를 입력으로 주는 경우에는 @_ 를 해시로 변환해서 받으면 된다.
sub left_pad {
my %args = @_ ;
my $newString = ( $args {"padChar"} x ( $args {"width"} - length $args{ "oldString"})) . $args{ "oldString"};
return $newString ;
}
print &left_pad( "oldString" => "pod" , "width" => 10, "padChar" => "+");
|
'Script > Perl' 카테고리의 다른 글
15. Regular Expression 1 - 기본 (0) | 2020.01.21 |
---|---|
14. Class (0) | 2020.01.21 |
12. Reference (0) | 2020.01.21 |
11. Context (0) | 2020.01.21 |
10. conditional sentence (0) | 2020.01.21 |