Content-type: text/html
a2p -7 -nlogin.password.uid.gid.gcos.shell.home
N'importe quel délimiteur peut être utilisé pour séparer les noms des champs.
print sprintf(some_args), extra_args;
Les anciennes versions de awk considèrent que les extra_args sont des arguments de "sprintf"; les nouvelles versions de awk considèrent ces mêmes arguments comme appartenant à "print".
Il y a une façon de faire en awk pour forcer une interprétation numérique en entourant une expression de chaine de caractères avec int(), bien que l'argument soit toujours un entier de toute façon. Cela n'est pas nécéssaire en Perl, mais a2p ne peut pas dire si l'argument doit toujours continué d'être un entier, donc il le laisse tel quel. Vous pouvez vouloir l'enlever.
Perl différencie les comparaisons numériques des comparaisons de chaîne de caractères. Awk a un opérateur pour les deux et décide au moment de l'exécution (run time) quel type de comparaison faire. A2p n'essaie pas de faire un travail complet d'émulation à ce stade. Au lieu de cela il suppose lequel vous voulez. C'est presque toujours bon, mais il peut se tromper. Tout ce qui est le résultat d'une supposition est marqué avec des commentaires. ""#???"". Vous devriez passer pour les vérifier. Vous devriez lancer au moins une fois avec le paramètre -w de Perl, lequel vous avertira si vous utilisez == au lieu d'utiliser eq.
Perl n'essaie pas d'imiter le comportement d'awk dans lequel des éléments de tableau inexistants apparaissent brusquement simplement en y faisant référence. Si, d'une façon ou d'une autre, vous comptez sur ce mécanisme pour créer des entrées nulles pour un traitement postérieur pour... dedans, il ne seront pas présent dans Perl.
Si a2p découpe une ligne et l'assigne a une liste de variables qui ressemble à (Fld1, Fld2, Fld3...) vous devriez relancer a2p en utilisant l'option -n mentionnée ci-dessus. Cela vous laissera nommer les champs partout dans le script. Si ça vous découpe la ligne en tableau, le script se réfère probablement à un nombre de champs quelque part.
Le statut de fin dans awk n'est pas forcément la fin du script ; il va au bloc END s'il y en a un. Les scripts awk qui contorsionnent dans le bloc END pour contourner ce même bloc peuvent être simplifiés dans de telle circonstance en enlevant la condition dans le bloc END et juste en sortant directement du script Perl.
Perl a deux sortes de tableaux, les numériques indexés et les associatifs. Les tableaux associatifs de Perl sont appellés ``hashes''. Les tableaux Awk sont souvent traduient en « hashes », mais s'il vous arrive de savoir qu'un index sera toujours de type numérique, vous pourriez changer les {...} par des [...]. Les itérations sur un tableau de type « hashes » sont faites en utilisant la fonction keys(), mais les itérations sur un tableau numérique sont NOT. Vous devriez avoir besoin de modifier chacune des boucles qui réitère sur ce type de tableau.
Awk commence par supposer que OFMT a la valeur %.6g. Perl commence par supposer que sont équivalent, $#, à la valeur %.20g. Vous pourriez vouloir initialiser explicitement $# si vous utilisez la valeur par défaut de OFMT.
Près du début de la ligne de boucle seront découpées les opérations qui sont implicites dans le script Awk. Il y a des fois, quand vous pouvez déplacer ces opérations plus bas, les conditions qui testent entièrement l'enregistrement entraînent un découpage différent de ce qui est fait d'habitude.
Pour des raisons esthétiques vous pourriez vouloir changer la base d'un tableau $[ à 1 au lieu de la valeur 0 qui est celle par défaut dans Perl, mais souvenez vous de changer tous les indices de tableau ET tous les substr() et les opérations index() pour que cela corresponde.
On passe les commentaires qui disent ``# Here is a workaround because awk is dumb'',ca reste inchangé.
les scripts Awk sont souvent incorporés dans des scripts en Shell qui « tunnelisent » les informations entrantes et sortantes de Awk. Souvent l'emballage de script Shell peut être incorporé dans le script Perl, depuis que Perl peut démarrer en se « tunnelisant » lui-même, et peut faire d'autres choses que awk ne peut pas faire lui-même.
Les scripts qui font référence aux variables spéciales RSTART et RLENGTH peuvent souvent être simplifiés en faisant référence aux variables $`, $& et $', tant qu'elles sont dans les limites du modèle qui les a initialisées.
Le script Perl produit peut avoir des sous-routines définies pour traiter les sémantiques awk quant aux impressions et les commandes de saisies. Depuis a2p choisit d'habitude la justesse sur l'efficacité. C'est presque toujours possible de réécrire un tel code pour être plus efficace en renoncant au code superflu.
Pour plus d'efficacité, vous pourriez vouloir enlever le mot-clé de n'importe quelle déclaration de retour qui est la dernière déclaration exécutée dans un sous-programme. A2p attrape la plupart des cas communs, mais n'analyse pas de blocs incorporés pour des cas plus subtils.
ARGV[0] est traduit en $ARGV0, mais ARGV[n] est traduit en $ARGV[$n]. Une boucle qui essaierait de réitérer sur ARGV[0] ne le trouverait pas.
perl Le compilateur/interpréteur Perl
s2p traducteur de sed à perl
Le stockage de l'arbre de syntaxe de awk est actuellement statique, et peut-être expiré.