Jemand zu Hause?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;
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem1 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
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problemsystem('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;
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-ProblemQuotewenn 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;
File::Temp genau das Verzeichnis vorgeben, wo auch auch $file liegt, was beide Probleme behebt.
File::Copys move() verwenden. Dann sollten Dateisystemgrenzen auch egal sein.
move( $tempfile, $file ) ...
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-ProblemQuoteDas 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.