0

j'ai un script Perl qui reçoit 3 arugments.argument script perl contient doubles quotas "

Le premier argument est très long et contient des espaces et des citations et fait, je ne sais pas ce que la taille de l'attendre pourrait être de toute taille . Pour séparer mes arguments que je l'utilise ":" signe

Voir par exemple:. ./my_script.pl 2MT5 4XAW KEAR TTRR AAMM "TEMP 1 février 2012": simple: 123.x

Le problème est que Je perds les guillemets et les espaces. Voir sortie:

LOG The 1st input is:2MT54XAWKEARTTRRYYMMTEMP 2012 FEB 01 

LOG Type is:Single 

LOG Version is:123.x 

Mon code:

open (FD, ">file2.txt"); 

print FD @ARGV; 

close FD; 

my $str1=`cat file2.txt`; 

my @argv_values = split(':',$str1); 

$new_str = $argv_values[0]; 

$type = $argv_values[1]; 

$ver = $argv_values[2]; 

Répondre

3

Votre programme Perl ne reçoit PAS 3 arguments, il reçoit 6 arguments. Il suffit d'imprimer les pour voir par vous-même:

perl -le 'print for @ARGV' 2MT5 4XAW KEAR TTRR YYMM "TEMP 2012 FEB 01":Single:123.x 

Votre premier argument (2MT5) n'est pas « très long », il est à seulement 4 caractères.

Vous n'avez pas de problème Perl, vous avez un problème de shell. Le shell divise les arguments sur les espaces et traite les guillemets doubles. Si vous ne le souhaitez pas, vous devez citer tous les arguments contenant des espaces ou des guillemets:

./my_script.pl '2MT5 4XAW KEAR TTRR YYMM "TEMP 2012 FEB 01":Single:123.x' 
+0

Merci, une seule citation m'a aidé – Toren

+0

Merci, j'étais confronté à un problème similaire - il s'est avéré que j'avais un problème de coquille, comme vous l'avez dit @tadmc – RockyMM

3

Il est la coquille jeter ces caractères. Passer des arguments correctement (qui comprend en citant de ceux qui contiennent des espaces, et d'échapper à des citations à l'intérieur) et qui ne sera pas un problème:

./my_script.pl "2MT5 4XAW KEAR TTRR YYMM \"TEMP 2012 FEB 01\"" "Single" "123.x" 

vous n'avez pas besoin de mess avec division et union. Vous aurez les arguments correctement organisés en premier lieu.

0
  • De cours vous perdez les guillemets. C'est le comportement standard de la ligne de commande NIX *, où les guillemets doubles indiquent que vous voulez que le contenu à l'intérieur soit traité comme un argument.
  • Et quand vous print une liste d'articles, ils vont être concaténés simplement.

La façon la plus simple de faire ce que vous avez l'intention est de print "@ARGV"; parce que le séparateur de liste par défaut, pour les listes interpolées, est un seul espace.

+0

Merci. Votre réponse m'a aidé à comprendre le problème. – Toren