2010-06-10 6 views
2

J'essaie d'ajouter tous les éléments dans le tableau en utilisant push. puis j'emmagasinés dans un autre fichierLe fichier ajoute un espace supplémentaire dans chaque ligne

mais début de fichier je vois un whitespeace dans tout ..

Quel est le problème .. une avant face à ce problème.

open FILE , "a.txt" 

while (<FILE>) 
{ 

    my $temp =$_; 

    push @array ,$temp; 

} 
close(FILE); 

open FILE2, "b.txt"; 
print FILE2 "@array"; 
close FILE2; 
+7

[Ligne 17] (http://www.perlfoundation.org/perl5/index.cgi?line_17). – daxim

+0

Erreur de ligne fixe 17 .. qui a trouvé ceci? Ligne 17 – Tree

+3

Voici une énigme. Seulement, je connais la réponse, mais vous seul connaissez la question. Nous sommes dans une impasse! Que diriez-vous de me dire la question et ensuite je vous dirai la réponse. Astuce: http://www.catb.org/~esr/faqs/smart-questions.html#beprecise – Ether

Répondre

7

Lorsque vous citez une variable de tableau comme ceci: "@array" elle est interpolée avec des espaces. C'est de là qu'ils viennent dans votre sortie. Donc, ne citez pas si vous n'avez pas besoin de ce type d'interpolation.

Maintenant, réécrivons votre programme sur Perl moderne.

use strict; 
use warnings FATAL => 'all'; 
use autodie qw(:all); 

my @array; 
{ 
    open my $in, '<', 'a.txt'; 
    @array = <$in>; 
} 

{ 
    open my $out, '>', 'b.txt'; 
    print {$out} @array; 
} 
+0

Vous avez déclaré '@ array' deux fois, de sorte que l'un éclipse l'autre. – Ether

+2

Fixé. Cela m'apprend à toujours tester mes programmes, même s'ils ne sont que de 10 lignes. ': - |' – daxim

2

open prend habituellement un autre argument qui spécifie si le fichier est ouvert en entrée ou pour la sortie (ou pour les deux ou pour un autre cas particulier). Vous avez omis cet argument et, par défaut, FILE2 est un descripteur de fichier d'entrée.

Vous vouliez dire

open FILE2, '>', "b.txt" 

Si vous mettez la ligne

use warnings; 

au début de chaque script Perl, l'interprète va attraper beaucoup de questions comme celle-ci pour vous.

+1

et par souci de clarté, il vaudrait mieux dire 'open FILE1 ',' '' ',' a.txt '' – mob

4

Vous placez des guillemets autour de "@array". Cela en fait une interpolation de chaîne qui, pour les tableaux, équivaut à join($", @array). La valeur par défaut pour $" est (devinez quoi?) Un espace.

Essayez

print FILE2 @array; 
+0

excellent .. ça marche ... – Tree

Questions connexes