GetOpt::Long::GetOptions를 사용하여 문자열을 어떻게 구문 분석합니까?

StackOverflow https://stackoverflow.com/questions/118289

  •  02-07-2019
  •  | 
  •  

문제

Read-Eval-Print-Loop 프로그램을 사용하여 가능한 명령줄 인수가 있는 문자열이 있고 Getopt::Long에 전달될 때 명령줄 인수와 유사하게 구문 분석되기를 원합니다.

자세히 설명하자면:

나는 문자열을 가지고

$str = '--infile /tmp/infile_location --outfile /tmp/outfile'

새 옵션을 추가하기가 더 쉽도록 GetOptions로 구문 분석하기를 원합니다.

제가 생각할 수 있는 한 가지 해결 방법은 문자열을 공백으로 분할하고 @ARGV를 새 배열로 바꾼 다음 GetOptions를 호출하는 것입니다.뭔가 ...

my @arg_arr = split (/\s/, $input_line);

# This is done so that GetOptions reads these new arguments
@ARGV = @arg_arr;
print "ARGV is : @ARGV\n";
GetOptions (
            'infile=s'  => \$infile,
            'outfile=s' => \$outfile
           );

좋은/더 좋은 방법이 있나요?

도움이 되었습니까?

해결책

섹션을 확인하세요. 임의의 문자열에서 옵션을 구문 분석 에서 Getopt::Long 매뉴얼 페이지, 내 생각엔 당신이 찾고 있는 것이 정확히 맞는 것 같아요.

다른 팁

공백으로 분할하는 대신 내장된 glob 기능을 사용하세요.공백으로 분할하는 것 외에도 표준 명령줄 확장을 수행한 다음 목록을 반환합니다.(예를 들어 *는 파일 목록 등을 제공합니다.) 또한 일반적인 원칙에 따라 @ARG를 지역화하는 것이 좋습니다.

그 외에는 GetOptions를 다시 작성하지 않고도 이를 수행할 수 있는 유일한 방법입니다. (분명히 설명서를 더 주의 깊게 읽어야 합니다.)

우와!!!

나는 bentilly와 dinomite의 답변을 모두 사용하고 다음을 수행할 수 있다고 생각합니다.

  • glob을 사용하여 표준 명령줄 확장 수행
  • GetOpt::Long의 GetOptionsFromArray 메서드에 glob 뒤의 배열을 전달합니다(참조: 여기)

코드는 다음과 같을 수 있습니다 ...

GetOptionsFromArray ([glob ($input_line)]);

그리고 그것은 단지 한 줄입니다 ..멋지네요(오류 검사 등을 수행해야 한다는 것을 알고 있습니다) ..하지만 멋지다 ...

사용자 입력 이외의 항목에 Getopt::Long을 사용하는 경우 POSIXLY_CORRECT 환경 변수에 따라 일부 기능이 다르다는 점에 유의하세요.적절한 구성 호출로 이를 재정의할 수 있습니다.

필수 POSIXLY_CORRECT 일화.

GetOptionsFromArray 및 GetOptionsFromString 메서드는 v2.36에만 추가되었으며 Murphy는 버전 2.35만 있다고 말했습니다.

당분간은 로컬 @ARGV와 함께 생활해야 할 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top