Leser: 26
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#!/usr/bin/perl use strict; use warnings; use Tie::File; my $file = '/path/to/file'; tie my @lines, 'Tie::File', $file or die $!; for my $index ( reverse 0 .. $#lines ) { next unless $index % 2; splice @lines, $index, 1; } untie @lines;
1 2 3 4
use Tie::File; tie my @array, "Tie::File", $filename or die $!; my @tmp = map { $array[ $_ * 2 ] } 0 .. $#array / 2; @array = @tmp;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
#!/usr/bin/perl use warnings; use strict; my $i = 0; while(my $zeile = <DATA>) { $i = $. / 2; print $zeile if $i =~ m/\./; } # while __DATA__ Zeile1 Zeile2 Zeile3 Zeile4 Zeile5 Zeile6 Zeile7 Zeile8 Zeile9 Zeile10
2009-11-10T09:51:46 havi
print $zeile unless $. % 2;
perl -i -ne 'print if $. % 2' doppelt.txt
system('perl', '-i', '-ne', 'print if $. % 2', $datei);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
use IO::Handle; use File::Temp; use File::Spec; use autodie; my $file = $ARGV[0]; my $temp = File::Temp->new(DIR => File::Spec->curdir); open my $fh, '<', $file; while ( my $line = $fh->getline ) { if ( $fh->input_line_number % 2 ) { $temp->print($line); } } close $fh; rename $temp->filename, $file;
Quotewenn ich mir deinen ausgeschriebenen code anschaue, scheint er komplexer zu sein als eine lösung mit Tie::File.
2009-11-10T11:44:17 sid burnCode (perl): (dl )1 2 3 4 5 6 7[...] my $file = $ARGV[0]; my $temp = File::Temp->new(DIR => File::Spec->curdir); [...] rename $temp->filename, $file;
move( $tempfile, $file ) ...
QuoteDas so zu machen ist meiner Meinung nach keine so tolle Idee, da rename auf vielen Systemen fehlschlägt, wenn $file und $temp nicht auf dem gleichen Dateisystem liegen
Quoteund da ich ohne Lektüre des Quellcodes niemals annehmen würde, dass temporäre Dateien einfach ins aktuelle Arbeitsverzeichnis gekleistert werden.
QuoteIch würde dem Konstruktor von CPAN: File::Temp genau das Verzeichnis vorgeben, wo auch auch $file liegt, was beide Probleme behebt.