Main /

Perl Schnippsel

Perl Schnippsel

/ HomePage / Computer / Software / Programmierung / Schnipsel

Perl Schnippsel

Wer kennt das nicht: da programmiert man Tag ein Tag aus und dann kommt jemand und fragt, wie dies oder das noch mal eben ging...

Perl direkt aus der Shell ohne extra Programmdatei

perl -e 'print "$$\n";'

Aktuelles Datum als YYMMDD

 perl -e '($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();\
$date = sprintf("%02d%02d%02d", ($year % 100), ($mon + 1), $mday);print $date;'

oder kürzer

 perl -e 'use POSIX qw(strftime);$str=strftime "%y%m%d",localtime;print $str."\n";'

Datum als YYYYMMDD

 perl -e '($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();\
$date = sprintf("%04d%02d%02d", ($year + 1900), ($mon + 1), $mday);print $date;'

oder kürzer

 perl -e 'use POSIX qw(strftime);$str=strftime "%Y%m%d",localtime;print $str."\n";'

Anmerkung: Arbeitet man z.B. in einer Bash Shell unter Unix Systemen (cygwin auch) ist folgendes etwas kürzer.

 date +%y%m%d

Dieses sinnfreie Zeile soll nur zeigen, wie man Perl dazu bringt etwas zu interpretieren, ohne daß eine Quelltext-Datei erstellt werden muss. Die Ausgabe ist die Prozess-ID des Prozesses des Perl-Interpreters, die es nach Abarbeitung der Zeile nicht mehr gibt.

Zählschleife

perl -e 'for ($i=0; $i<10;$i++) { print "$i\n";}'

Ausgabe:

 0
 1
 2
 3
 4
 5
 6
 7
 8
 9

if then else

 if (condition)
 {
   expression(s)
 } 
 [ elsif (condition) { ... } ]²
 [ else { ... } ]³
  • ²) Darf beliebig oft vorkommen
  • ³) Darf genau einmal vorkommen

Erfragen des aktuellen Systems

 perl -e 'print $^O."\n";'
 perl -e "print $^O;" Extrawurst für Windows

Ausgaben:

Ausgabe:System
linuxGentoo Linux
solarisSolaris Intel x86
solarisSolaris Sun Sparc
darwinApple Macintosh x86 (Mac Mini)
cygwinWindows cygwin environment
* 4NT: Unknown command "perl"Windows 2003 Server, 4NT Shell, Perl nicht installiert
Can't find string terminator "'" anywhere before EOF at -e line 1.Perl call unter Windows braucht eine Extrawurst
MSWin32Windows XP 32bit

Traverse Directorys

Es gibt auch noch File::Find, allerdings kommt es da ab und zu zu etwas kruden Ergebnissen, die dann doch nur mit der opendir() Methode gelöst werden können, weshalb ich Lars File::Find (leider) abgeneigt bin.

 # perl
 use File::Find qw(find);
 $mydir= '/path/to/search';

 sub wanted
 {
    if ($_ =~/\.html$/ && -T $File::Find::name) # html und heuristic Text
    {
        print $File::Find::name, "\n";
    }
 }

 find(\&wanted, $mydir);

Das funktioniert noch ganz prima, aber wehe man nutzt die %options nebst no_chdir=1 und hat symbolische links, dann funktioniert das ganze nämlich nicht unbedingt.

Dann kommen solche komischen Fehlermeldungen. Wo ich Lars dann nur noch sage 6, setzen.

 Can't use string ("no_chdir") as a subroutine ref while "strict refs" in use at /usr/lib/perl5/5.8.8/File/Find.pm line 822.
 at /usr/lib/perl5/5.8.8/File/Find.pm line 822
	File::Find::_find_dir('HASH(0x99ce798)', '/tmp', 46) called at /usr/lib/perl5/5.8.8/File/Find.pm line 700
	File::Find::_find_opt('HASH(0x99ce798)', 1, 'wanted', 'CODE(0x99c51f0)', '/tmp') called at /usr/lib/perl5/5.8.8/File/Find.pm line 1223
	File::Find::find('no_chdir', 1, 'wanted', 'CODE(0x99c51f0)', '/tmp') called at /tausch/lla/traversedir.pl line 25
	main::traverse() called at /tausch/lla/traversedir.pl line 11

siehe auch

Links

Frische Änderungen | Menü editieren
zuletzt geändert am 16.09.2010 14:59 Uhr von Lars
Edit Page | Page History