1 2 3
my $dummy = $ar_entry_chunks[$i]; $dummy =~ /(.+?)\<\/B\>\<\/center\>/g; print $1;
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
#!/usr/bin/perl use strict; use warnings; use POSIX qw(strftime); use LWP::Simple; print "Hello, ScheduledWorld...\n"; while (1) { open(DEBUG, ">>debug.log"); open(FILE, "<tmp_lines.txt"); my @ar_title_lines = <FILE>; close(FILE); my $file_scalar = join(';', @ar_title_lines); #$file_scalar = ""; my $site = get("..."); my @ar_entry_chunks = split(/\<center\>\<B\>/, $site); shift(@ar_entry_chunks); my $num = $#ar_entry_chunks + 1; print DEBUG "num chunks: ".$num."\n"; open(TEMP_FILE, ">tmp_lines.txt"); my $offset = 0; for (my $i=0; $i<=$#ar_entry_chunks; $i++) { my $dummy = $ar_entry_chunks[$i]; $dummy =~ /(.+?)\<\/B\>\<\/center\>/g; if (index($file_scalar, "$1") == -1) { $offset++; print "$i new: ".$1."\n"; print TEMP_FILE $1."\n"; print DEBUG "i:$i offset:$offset new: ".$1."\n"; } else { print "$i old: ".$ar_title_lines[$i-$offset]; print TEMP_FILE $ar_title_lines[$i-$offset]; print DEBUG "i:$i offset:$offset old: ".$ar_title_lines[$i-$offset]; } } close(TEMP_FILE); if ($offset > 0) { open(STAT_FILE, ">>posting_stats.txt"); print STAT_FILE "offset: ".$offset."\n"; print STAT_FILE strftime('%d-%m-%Y %H:%M',localtime)."\n"; close(STAT_FILE); } print DEBUG "offset: ".$offset."\n"; print DEBUG strftime('%d-%m-%Y %H:%M',localtime)."\n"; print DEBUG "################################################################debug\n"; close(DEBUG); sleep(60); }
2011-09-22T21:37:35 IceRagePS: Warum ist die Darstellung hier so verschoben. In der Vorschau ist alles in Ordnung.
my @entry_chunks=$site=~m!\Q<center><B>\E(.+?)\Q</B></center>\E!g;
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
#!/usr/bin/perl use strict; use warnings; use POSIX qw(strftime); use LWP::Simple; # alle wichtigen Einstellungen my $website='...'; my $dbug_file='debug.log'; my $line_file='tmp_lines.txt'; my $stat_file='posting_stats.txt'; my $wait_time=60; print "Hello, ScheduledWorld...\n"; # Hash mit den Titeln my %found_lines; # schon mal gefundene Titel Laden wenn vorhanden if(-f $line_file) { open(my $fh, '<', $line_file) or die(qq(ERROR open "$line_file" "$!"\n)); my $pos=0; while(<$fh>) { chomp($_); $found_lines{$_}=$pos; $pos++; } close($fh); } while (1) { # defug datei öffnen open(my $dbug_fh, '>>', $dbug_file) or die(qq(ERROR open "$dbug_file" "$!"\n)); # webseite holen my $site = get($website); # wenn die Seite geladen werden konnte if($site) { # Hash mit den neuen Titeln my %new_found_lines; # Zeigt an wie viele neue Einträge hinzu gekommen sind my $offset=0; # finde alle "Titel" my @entry_chunks=$site=~m!\Q<center><B>\E(.+?)\Q</B></center>\E!g; print $dbug_fh "num chunks: ".scalar(@entry_chunks)."\n"; # Zeilenenden aus den Titeln entfernen chomp(@entry_chunks); # alle gefundenen Titel durch gehen for my $i (0..$#entry_chunks) { my $found=$entry_chunks[$i]; # wenn der Titel schon bekannt ist if(exists($found_lines{$found})) { print "$i old: $found\n"; # titel an anderer stelle? my $moved=$found_lines{$found}-$i; print $dbug_fh "i:$i offset:$offset moved:$moved old: $found\n"; } # wenn der Titel neu ist else { $offset++; print "$i new: $found\n"; print $dbug_fh "i:$i offset:$offset new: $found\n"; } # Titel von der Webseite dem neuen Hash hinzufügen $new_found_lines{$found}=$i; } # list der Titel speichern, # status_datei ergänzen # wenn sich was geändert hat. if($offset) { # aktuelle zeit my $time_now=strftime('%d-%m-%Y %H:%M',localtime); # Titel schreiben if(open(my $line_fh, '>', $line_file)) { print $line_fh join("\n", @entry_chunks); close($line_fh); } else { warn(qq(ERROR open "$line_file" "$!"\n)); print $dbug_fh qq(ERROR open "$line_file" "$!"\n); } # Status schreiben if(open(my $fh, '>>', $stat_file)) { print $fh "offset: $offset\n"; print $fh "$time_now\n"; close($fh); } else { warn(qq(ERROR open "$stat_file" "$!"\n)); print $dbug_fh qq(ERROR open "$stat_file" "$!"\n); } } # alte Titel den Neuen überschreiben %found_lines=%new_found_lines; print $dbug_fh "offset: $offset\n"; } # Fehlermeldung wenn die Seite nicht geladen wurde else { warn "ERROR load website $website\n"; print $dbug_fh "ERROR load website $website!\n"; } print $dbug_fh strftime('%d-%m-%Y %H:%M',localtime); print $dbug_fh "\n################################################################debug\n"; close($dbug_fh); # warten sleep($wait_time); }
1
2
3
4
5
6
7
8
9
10
11
12
$ perl -wE'
$_ = "foo bar baz";
m/(\w{3})/g;
say $1;
m/(\w{3})/g;
say $1;
m/(\w{3})/g;
say $1;
'
foo
bar
baz
2011-09-22T23:02:39 pqein globales matching funktioniert im skalaren kontext so, dass bei jedem aufruf der nächste match versucht wird.
1
2
3
4
5
6
7
8
9
10
$ perl -wE'
my @array = ("foo bar baz", "FOO BAR BAZ","a b c","d e f");
for my $i (0..$#array) {
$array[$i] =~ m/(\w{3})/g;
say $1;
}'
foo
FOO
FOO
FOO
1
2
3
4
5
6
7
8
9
10
11
$ perl -wE'
my @array = ("foo bar baz", "FOO BAR BAZ","a b c","d e f");
for my $i (0..$#array) {
my $string = $array[$i];
$string =~ m/(\w{3})/g;
say $1;
}'
foo
FOO
a b
d e
2011-09-23T12:40:19 pqalso gut, hier eine demo:
Code: (dl )1
2
3
4
5
6
7
8
9
10$ perl -wE'
my @array = ("foo bar baz", "FOO BAR BAZ","a b c","d e f");
for my $i (0..$#array) {
$array[$i] =~ m/(\w{3})/g;
say $1;
}'
foo
FOO
FOO
FOO
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 27
$ perl -le ' my @array = ("foo bar baz", "FOO BAR BA?", "a b c", "d e f"); for(1..4) { for my $i (0..$#array) { if( $array[$i] =~ m/(\w{3})/g ) { print "$i: $1"; } else { print "$i: no match"; } } }' 0: foo 1: FOO 2: no match 3: no match 0: bar 1: BAR 2: no match 3: no match 0: baz 1: no match 2: no match 3: no match 0: no match 1: FOO 2: no match 3: no match
2011-09-23T14:21:09 torstenDu machst hier den von GwenDragon geschilderten Fehler und prüfst das Resultat von =~ nicht.