Perl의 명명된 서브루틴 인수
11431 단어 perl
sub safe_open {
my $file = shift @_;
my $mode = shift @_;
my $die_on_failure = shift @_;
my $success = open(my $fh, $mode, $file);
if ((not $success) and $die_on_failure) {
die "error: failed to open '$file': $!\n";
}
return $fh;
}
다음 예제에서 세 번째 인수를 사용하면 파일을 열 수 없는 경우 프로그램을 종료해야 하는지 여부를 제어할 수 있습니다.
my $fh = safe_open('/file/that/doesnt/exist', '>', 1);
print $fh "Hello, World!\n";
# OUTPUT:
# error: failed to open '/file/that/doesnt/exist': No such file or directory
my $fh = safe_open('/file/that/doesnt/exist', '>', 0);
print $fh "Hello, World!\n";
# OUTPUT:
# print() on closed filehandle $fh at ./scratch.pl line 22.
이전에 이 코드로 작업한 적이 없는 사람이
&safe_open
에 대한 이러한 호출을 발견했다고 상상해 보십시오. 서브루틴의 실제 코드를 살펴보지 않으면 세 번째 인수가 무엇을 의미하는지 알 수 없습니다.사람들이 인수의 의미를 더 쉽게 이해할 수 있도록 이름을 지정할 수 있습니다!
sub safe_open {
my %args = (
FILE => '',
MODE => '',
DIE_ON_FAILURE => 1,
@_
);
$args{FILE} or die "error: missing FILE arg in call to &safe_open\n";
$args{MODE} or die "error: missing MODE arg in call to &safe_open\n";
my $success = open(my $fh, $args{MODE}, $args{FILE});
if ((not $success) and $args{DIE_ON_FAILURE}) {
die "error: failed to open '$args{FILE}': $!\n";
}
return $fh;
}
이 서브루틴을 호출하는 몇 가지 예를 살펴보겠습니다.
my $fh = safe_open(FILE => '/file/that/doesnt/exist', MODE => '>', DIE_ON_FAILURE => 1);
print $fh "Hello, World!\n";
# OUTPUT:
# error: failed to open '/file/that/doesnt/exist': No such file or directory
my $fh = safe_open(FILE => '/file/that/doesnt/exist', MODE => '>');
print $fh "Hello, World!\n";
# OUTPUT:
# error: failed to open '/file/that/doesnt/exist': No such file or directory
my $fh = safe_open(DIE_ON_FAILURE => 0, FILE => '/file/that/doesnt/exist', MODE => '>');
print $fh "Hello, World!\n";
# OUTPUT:
# print() on closed filehandle $fh at ./scratch.pl line 25.
이러한 예에서 주목해야 할 몇 가지 사항이 있습니다.
ARG => value
구문을 사용하여 명시적으로 이름을 지정해야 합니다. DIE_ON_FAILURE
인수는 선택 사항이며 기본값은 true입니다. 우리의
&safe_open
서브루틴은 %args
해시를 구성하는 데 사용되는 전략 때문에 이러한 기능을 가지고 있습니다.인수 순서가 중요하지 않은 이유는 해시가 정렬되지 않았고 결국 인수 목록에서 해시를 구성하기 때문입니다.
짝수의 요소가 있는 한 배열을 사용하여 해시를 구성할 수 있습니다. 이를 활용하여
@_
배열을 사용하여 %args
해시를 구성합니다. 다음은 이 동작의 예입니다.my @array = ('foo', 12, 'bar', 13);
my %hash = @array;
print "\$hash{'foo'} = $hash{'foo'}\n";
print "\$hash{'bar'} = $hash{'bar'}\n";
# OUTPUT:
# $hash{'foo'} = 12
# $hash{'bar'} = 13
해시 정의가 동일한 키를 여러 번 정의하는 경우 마지막 정의가 사용된다는 사실 때문에 기본 인수 값을 제공할 수 있습니다. 사용자가 인수를 생략하면 재정의되지 않고 기본값으로 설정된 상태로 유지됩니다. 다음 예를 고려하십시오.
my %hash = (
FOO => 12,
FOO => 13
);
print "\$hash{'FOO'} = $hash{'FOO'}\n";
# OUTPUT:
# $hash{'FOO'} = 13
개요
서브루틴 인수 배열( @_
)을 사용하여 해시를 구성할 수 있으며, 이는 코드 가독성 측면에서 상당한 이점을 제공할 수 있습니다. 인수 배열에서 해시를 생성함으로써 서브루틴에 대한 모든 호출은 인수의 이름을 명시적으로 지정해야 합니다. 인수 순서는 관련이 없으며 인수에 기본값을 지정할 수 있습니다.
Reference
이 문제에 관하여(Perl의 명명된 서브루틴 인수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/nicholasbhubbard/named-subroutine-arguments-in-perl-2a3h
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Perl의 명명된 서브루틴 인수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nicholasbhubbard/named-subroutine-arguments-in-perl-2a3h텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)