Essa linha que tenho no meu código corta o .csh de uma string e retorna o restante dela. Alguém pode explicar o que cada parte faz?
($eachJOBID = $eachScriptNoPath) =~ s/\.csh// ;
Essa linha que tenho no meu código corta o .csh de uma string e retorna o restante dela. Alguém pode explicar o que cada parte faz?
($eachJOBID = $eachScriptNoPath) =~ s/\.csh// ;
Isto é sobre sintaxe Perl. As peças são:
O valor na variável escalar
$eachScriptNoPath
é copiado para a variável escalar$eachJOBID
. A instrução é colocada entre parênteses para agrupar a operação de atribuição e controlar a precedência entre a atribuição e a correspondência da expressão regular na próxima parte.À medida que o valor é copiado para
$eachJOBID
, o valor é avaliado em relação à correspondência e à operação da expressão regular. Esta expressão corresponde a qualquer parte do valor que é a string '.csh' e não substitui nada por essa string. Ou seja, exclui a string.Portanto o valor que termina
$eachJOBID
não terá '.csh'. Ou seja, o ID do trabalho será o nome do arquivo do script com '.csh' removido.Se a instrução de atribuição à esquerda não tivesse sido colocada entre parênteses, Perl provavelmente teria executado
$eachScriptNoPath =~ s/.csh//
primeiro por causa da precedência do operador, e um sucesso/falha booleano (1/0) para a instrução de expressão regular teria sido colocado$eachJOBID
em vez do pretendido sequência de identificação do trabalho.