아래의 코드에서
for (1 .. shift || 1) { # ... }
for loop문 안의 조건문이 잘 이해가 되지 않습니다.
print (1 .. shift || 1) 하면 1이 출력되고 print (1 .. shift || 7) 하니까 1234567이 출력이 되는군요.
이 코드가 어떤 의미일까요?
perl에서 $element = shift @array
식으로 하면 배열에서 값을 하나씩 꺼내옵니다. 그런데 shift 만쓰고 배열을 특별히 지정안해주면 아마 명령줄의 아규먼트를 가져올겁니다.
만약 pl이름이 test.pl 이고 프로그램이
for (1 .. shift || 1) { print $_; }
test.pl 5 이렇게 하면 1,2,3,45를 찍을겁니다..
음.. 해보지는 못해서 확답은 못드리겠네요.. 아마 맞을겁니다.. ^^ 좀있다 한번 해봐야 겠네요.. ;;
shift || 1
에서 shift 는 hackexport 님이 잘 설명해주셨고요
|| 1 은 명령행에 인자가 주어지지 않은 경우 shift 가 undef 를 리턴하고
undef || 1 에서 || 연산자의 왼쪽이 undef이기 때문에 오른쪽까지
evaluate하게 되어서 1이 shift || 1 식의 값이 됩니다.
기본값을 지정하는데 종종 사용되는 펄 숙어라고 해야할까요?
$output_file = shift || "output";
도 비슷한 구문이고, 이를 TIMTOWDI 해 보면,
if (@ARGV > 0) { $output_file = $ARGV[0]; shift @ARGV; } else { $output_file = "output"; }
정도가 되겠습니다.
간결하긴 하지만 익숙치 않은 사람들에게는 좀 혼란스러운 표현이지요.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
Re: perl에서 shift
perl에서
$element = shift @array
식으로 하면 배열에서 값을 하나씩 꺼내옵니다.
그런데 shift 만쓰고 배열을 특별히 지정안해주면
아마 명령줄의 아규먼트를 가져올겁니다.
만약 pl이름이 test.pl 이고
프로그램이
이라면
test.pl 5
이렇게 하면 1,2,3,45를 찍을겁니다..
음.. 해보지는 못해서 확답은 못드리겠네요..
아마 맞을겁니다.. ^^
좀있다 한번 해봐야 겠네요.. ;;
shift || 1에서 shift 는 hackexport 님이 잘
shift || 1
에서 shift 는 hackexport 님이 잘 설명해주셨고요
|| 1 은 명령행에 인자가 주어지지 않은 경우 shift 가 undef 를 리턴하고
undef || 1 에서 || 연산자의 왼쪽이 undef이기 때문에 오른쪽까지
evaluate하게 되어서 1이 shift || 1 식의 값이 됩니다.
기본값을 지정하는데 종종 사용되는 펄 숙어라고 해야할까요?
$output_file = shift || "output";
도 비슷한 구문이고, 이를 TIMTOWDI 해 보면,
정도가 되겠습니다.
간결하긴 하지만 익숙치 않은 사람들에게는 좀 혼란스러운 표현이지요.
댓글 달기