대체하는 방법$*=1 는 다른 지금$*은 더 이상 지원되지 않음

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

  •  01-07-2019
  •  | 
  •  

문제

나는 완전한 perl 초보,실행하는 perl 스크립트를 사용하여 perl5.10 및 이 경고:

$* is no longer supported at migrate.pl line 380.

할 수 있는 사람이 무엇인지 설명하$*했고,무엇을 대체 제품의 그것입니다.또는 당신 지점을 설명서 설명하는 이 좋은 것입니다.

스크립트를 실행하는 마이그레이션하는 소스 코드를 데이터베이스에서 vss svn 으며 여기에서 찾을 수 있습니다:http://www.x2systems.com/files/migrate.pl.txt

두 개의 조각의 코드를 사용하는것이 있다:

    $* = 1;
    $/ = ':';

    $cmd = $SSCMD . " Dir -I- \"$proj\"";
    $_ = `$cmd`;

    # what this next expression does is to merge wrapped lines like:
    #    $/DeviceAuthority/src/com/eclyptic/networkdevicedomain/deviceinterrogator/excep
    #    tion:
    # into:
    #    $/DeviceAuthority/src/com/eclyptic/networkdevicedomain/deviceinterrogator/exception:
    s/\n((\w*\-*\.*\w*\/*)+\:)/$1/g;

    $* = 0;

다음 몇 가지 방법으로 나중에:

            $cmd = $SSCMD . " get -GTM -W -I-Y -GL\"$localdir\" -V$version \"$file\" 2>&1";
            $out = `$cmd`;

            # get rid of stupid VSS warning messages
            $* = 1;
            $out =~ s/\n?Project.*rebuilt\.//g;
            $out =~ s/\n?File.*rebuilt\.//g;
            $out =~ s/\n.*was moved out of this project.*rebuilt\.//g;
            $out =~ s/\nContinue anyway.*Y//g;
            $* = 0;

많은 감사합니다,

도움이 되었습니까?

해결책

perlvar:

사용$*은 사용되지 않는 현대에서는 Perl,으로 대체/s/m/수정 패턴 매칭에.

액세스 권한이 있는 경우 장소에 그것의 일치하는 것만 추가 그것을 끝까지:

 $haystack =~ m/.../sm;

는 경우에만 액세스하는 문자열을 둘러싸고 있습 식로

 qr/(?ms-ix:$expr)/;

또는 당신의 경우:

s/\n((\w*\-*\.*\w*\/*)+\:)/$1/gsm;

다른 팁

Perl5.8 버전의 perlvar:

설정 non-zero 정수 값을 할 다이 라인의 일치에서 문자열 [...]의 사용$*은 사용되지 않에 현대 Perl,으로 대체/s /m 수정 패턴 매칭에.

을 사용하는 동안/s/m 훨씬 더 나은,당신을 설정해야 한정자(적절하게!) 에 대한 각 정기적인 표현입니다.

perlvar 도 "이 변수의 영향의 해석에만^및$." 는 느낌을 주는것은 상당/m 만 아닙니다.

Note $* 글로벌 변수입니다.기 때문에 변경을 만들지 않는 로컬과 local 키워드,영향을 미칠 것입니다 모든 정규 프로그램에서,단지 그는 그것을 따르에서 구획입니다.이 더 어렵게 만들 것입 업데이트 스크립트습니다.

수 있 perlvar:

$*

설정 non-zero 정수 값을 다 일치하는 라인에서 문자열을 0(또는 정의되지 않음)을 말한 Perl 수 있다는 가정의 문자열을 포함 한 줄의 목적을 위해,최적화하는 패턴 일치합니다.패턴 일치에 문자열을 포함하는 여러 줄 바꿈할 수 있습을 생산하는 혼란 때 결과 $* 0 거나 정의되지 않습니다.기본값은 정의되지 않습니다.(니모닉: * 경기 여러 가지.) 이 변수의 영향의 해석만 ^$.리터럴 줄 바꿈할 수 있습 검색한 경우에도 $* == 0.

의 사용 $* 은 사용되지 않는 현대에서는 Perl,대체 /s/m 수정 패턴 매칭에.

을 할당하는 숫자가 아닌 값을 $* 리는 경고를 표시(고 $* 로 작동하는 경우 $* == 0),는 숫자 값을 할당하기 $* 게는 암시적 int 에 적용되는 값입니다.

그것은 기본적으로 말하는 방법에 이후의 정규표현식(s///또 m//)에^또는$주장할 수 있어야 하기 전에 또는 후에 줄 바꿈에 포함된 문자열입니다.

권장하는 이와 동등한 m 자의 끝에서 당신의 정규식(예를 들어,s/ ((\w*-*.*\w*/*)+:)/$1/gm;).

으로 멀티-모드 라인.이후 perl5.0(1994 년),올바른 방법으로 할 수 있는 추가 m 그리고/또는 s 수정하 regexps,다음과 같이

 s/\n?Project.*rebuilt\.//msg
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top