2017-09-16 1 views
1

변수 "ex"를 서브 루틴 "potatoex()"에서 가져온 문자열 값으로 대체하려고 시도하고 다른 변수 " goodge는 " 어떤 구문 오류가 발생하지 그러나이 밖으로 작동하지 않는 것 같다 이 도와주세요변수를 문자열로 Perl의 서브 루틴 결과로 대체하십시오.

sub potatoex {  
    my $potato="Junos: 17.4DCB"; 
    if($potato = ~/"Junos: 17.4[a-zA-Z0-9_.]*"/) { 
    print "/var/home/smoketest/dhcpv6.pl.28709.log"; 
    } 
} 

을 주요 :..

{ 
    my $ex= potatoex(); 
    my $goodge= "Apurva $ex Arnav"; 
    print $goodge; 
} 

현재 O의 /의 P :/var에/홈/smoketest/dhcpv6.pl.28709.logApurva 1 Arnav

예상 된 O의 /의 P : Apurva /var/home/smoketest/dhcpv6.pl.28709.log Arnav

감사합니다, 당신의 서브 루틴 대신 return에서 보내고 Apurva

답변

1

당신은 print이 값을 보내고 그것에서. potatoexreturn을 사용해보세요.

sub potatoex {  
    my $potato = q{Junos: 17.4DCB}; 
    my $returnVal = ''; 

    if($potato =~ /Junos: 17\.4[a-zA-Z0-9_.]*/) { 
    $returnVal = q{/var/home/smoketest/dhcpv6.pl.28709.log}; 
    } 

    $returnVal; 
} 

{ 
    my $ex  = potatoex(); 
    my $goodge = qq{Apurva $ex Arnav}; 

    print $goodge; 
} 

당신이 (대신 print의) 위의 if 블록에 return을 사용할 수 있지만

, 내가 대신 항상 당신이하려고하는 값 또는 빈 문자열 중 하나를 반환하는 변수를 사용하기로 결정했다. 명시 적으로 반환 return returnVal;을 명시 할 수 있지만 perl이 암시 적으로 반환 할 수 있으므로 반드시 필요하지는 않습니다 (이 점을 참고하여 모범 사례에 적합해야하는지 아닌지 파악하십시오).

+0

감사하지만이 오류가 발생합니다 : –

+0

jdoodle.pl 줄 7, "/var/home/smoketest/dhcpv6.pl.28709.log"근처의 스칼라 지정에서 상수 항목을 수정할 수 없습니다 " 컴파일 오류로 인해 jdoodle.pl이 중단되었습니다. –

+0

그 이유는 테스트를하지 않고 코드를 입력하고 구문 오류가 있었기 때문입니다.) 변수에'$'기호가 없습니다. 지금 고쳐야한다 – vol7ron