[Cologne-pm] script auf mehreren CPU's starten

Michael Lamertz mike at lamertz.net
Fri Nov 11 01:30:08 PST 2005


On Fri, Nov 11, 2005 at 09:38:44AM +0100, Cem Sakaryali wrote:
> Hallo Aristotales,
> 
> 
> Ich verstehe diesen Bereich nicht.
> 
>         run_cmd( tar => 'cvzf', $tarball, $dir );
> 
> Heisst es hier:
> Erzeuge eine Liste mit den Elementen
> 
> tar,cvzf,$tarball,$dir
> 
> wobei wenn ich das  0. Element (tar) benutze soll es aus
> der Liste geloescht werden.
> Oder ist die Magie in
> 
> system { $_[ 0 ] } @_;
> 
> Ich wuerde diesen Bereich sehr gerne uebernehmen aber will
> auch nach 1 Woche immer noch verstehen was ich tue.

Erschreckt Dich der => Operator?

    ---------- perldoc perlop ----------
    The "=>" operator is a synonym for the comma, but forces any word
    (consisting entirely of word charac- ters) to its left to be
    interpreted as a string (as of 5.001).  If the argument on the left
    is not a word, it is first interpreted as an expression, and then
    the string value of that is used.
    ---------- perldoc perlop ----------

Also, 'tar => 1,2,3' macht nix anderes, als Dir eine Liste
('tar', 1, 2, 3) zu erzeugen.

Es ist nicht notwendig, das 1. Element zu loeschen, wenn Du system in
der obigen Form benutzt:

    ---------- perldoc -f system ----------
    Like "exec", "system" allows you to lie to a program about its name
    if you use the "system PROGRAM LIST" syntax.  Again, see "exec".
    ---------- perldoc -f system ----------

Gibst Du also PROGRAM *ohne Komma* vor der Liste an, so ist dies das
Programm, dass gestartet werden soll, waehrend das erste Element der
Liste der Name ist, von dem das gestartete Programm denkt, wie es
heisst. (Was fuer ein scheiss Satz @-)

Btw.:  Wusstet Ihr, dass $0 bei Perl von aussen anscheinend nicht
ueberschrieben werden kann?

Der Aufrufer:
    ---------- call.pl ----------
    #!/usr/bin/perl

    system {shift} @ARGV;
    ---------- call.pl ----------

Ein kleines C-Prograemmchen:
    ---------- run.c ----------
    #include <stdio.h>

    int main(int argc, char **argv) {
            while (*argv) printf("%s\n", *argv++);
    }
    ---------- run.c ----------

Und dasselbe in Perl:
    ---------- run.pl ----------
    #!/usr/bin/perl

    $\ = $, = "\n";
    print $0, @ARGV;
    ---------- run.pl ----------

Ergebnis:
    ---------- snip ----------
    tweety:~$ ./call ./run faked 1 2 3
    faked
    1
    2
    3
    tweety:~$ ./call ./run.pl faked 1 2 3
    ./run.pl
    1
    2
    3
    ---------- snip ----------

B0rk3n!  Oder am I missing s/t?


Mike

-- 
	    Well, then let's give that Java-Wussie a beating... (me)

Michael Lamertz                        |     +49 2234 204947 / +49 171 6900 310
Sandstr. 122                           |                       mike at lamertz.net
50226 Frechen                          |                 http://www.lamertz.net
Germany                                |               http://www.perl-ronin.de 


More information about the Cologne-pm mailing list