Rückgabe eines Systemaufrufs?

Rückgabe eines Systemaufrufs?

am 04.06.2006 20:37:37 von Chris Maanz

Guten Abend!

Warum funktioniert z.B.

#!/usr/bin/perl
$a=`echo text`;
print $a;

aber nicht

#!/usr/bin/perl
$a=`echo $USER`;
print $a;

Obwohl in der Shell echo $USER den Usernamen liefert.

Danke.
Christian

Re: Rückgabe eines Systemaufrufs?

am 04.06.2006 20:52:07 von Toni Erdmann

Chris Maanz wrote:
> Guten Abend!
>
> Warum funktioniert z.B.
>
> #!/usr/bin/perl
> $a=`echo text`;
> print $a;
>
> aber nicht
>
> #!/usr/bin/perl
> $a=`echo $USER`;
> print $a;
>
> Obwohl in der Shell echo $USER den Usernamen liefert.
>

Weil $USER eine Variable im Environment (Umgebung) der Shell ist.

`echo $ENV{'USER'}` ist das Pendant in Perl.

%ENV ist ein Hash auf das Environment (kann auch verändert werden).

Toni

Re: Rückgabe eines Systemaufrufs?

am 04.06.2006 21:09:30 von Frank Seitz

Chris Maanz wrote:

> Warum funktioniert z.B.
>
> #!/usr/bin/perl
> $a=`echo text`;
> print $a;
>
> aber nicht
>
> #!/usr/bin/perl
> $a=`echo $USER`;
> print $a;
>
> Obwohl in der Shell echo $USER den Usernamen liefert.

Weil $USER von Perl und nicht, wie Du annimmst,
von der Shell ausgewertet wird.
Mit "use warnings" und "use strict" wäre das nicht passiert.
Lösung: schreibe \$USER.

Der Vorschlag von Toni Erdmann geht natürlich auch.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: Rückgabeeines Systemaufrufs?

am 04.06.2006 21:50:53 von Achim Grolms

Toni Erdmann wrote:
> Chris Maanz wrote:

>> Obwohl in der Shell echo $USER den Usernamen liefert.
>>
>
> Weil $USER eine Variable im Environment (Umgebung) der Shell ist.
>
> `echo $ENV{'USER'}` ist das Pendant in Perl.

Und warum jetzt nicht

print $ENV{'USER'};

?

Re: Rückgabe eines Systemaufrufs?

am 05.06.2006 08:47:05 von Chris Maanz

"Toni Erdmann" schrieb im Newsbeitrag
news:e5va3j$ftr$1@svr7.m-online.net...
> Chris Maanz wrote:
> > Guten Abend!
> >
> > Warum funktioniert z.B.
> >
> > #!/usr/bin/perl
> > $a=`echo text`;
> > print $a;
> >
> > aber nicht
> >
> > #!/usr/bin/perl
> > $a=`echo $USER`;
> > print $a;
> >
> > Obwohl in der Shell echo $USER den Usernamen liefert.
> >
>
> Weil $USER eine Variable im Environment (Umgebung) der Shell ist.
>
> `echo $ENV{'USER'}` ist das Pendant in Perl.
>
> %ENV ist ein Hash auf das Environment (kann auch verändert werden).
>
> Toni
>

Danke!
Ich stand ein wenig auf der Leitung, weil ich vorher mit system probiert
habe,
und bei $a=system 'echo $USER' wird ja die Shell-Variable $USER verwendet,
im Gegensatz zu $a=system "echo $USER" wo ich die Perl-Variable $USER
verwende.
Aber mit $a=`echo \$USER` schafft man es auch, dass die Shell-Variable $USER
verwendet wird.

Zusammenfassung für alle die sich später dazu geschaltet haben (gilt
zumindest für perl v5.8.7 unter SuSE 10.0):

$a=system "echo $USER"; # Shell Befehl echo mit Perl-Variablen $USER, $a
zeigt nur ob Befehl erfolgreich war, wenn ok $a=0
$a=system 'echo $USER'; # Shell Befehl echo mit Shell-Variablen $USER, $a
zeigt nur ob Befehl erfolgreich war, wenn ok $a=0

$a=`echo $USER`; # Shell Befehl echo mit Perl-Variablen $USER, $a enthält
Ausgabe des echo-Befehls
$a=`echo \$USER`; # Shell Befehl echo mit Shell-Variablen $USER, $a enthält
Ausgabe des echo-Befehls

Christian

Re: Rückgabe eines Systemaufrufs?

am 09.06.2006 02:45:59 von Maluku

Chris Maanz schrieb:
> $a=`echo \$USER`;
\$ ist hässlich
$a=qx'echo $USER';


--
$_='';s%%`^.*`s;.*;uhtnmo;;a>lha~a>inu~a>fmk~a>rou~a>duM~a>b tl~s;&&&&&&;
!d1!l2!b3!i4!f5!r6q(?);e;Z``}a>&&&`sub# "1#{#"_=shift#;s^"2^"3#^;``;~`
return #"_#}``^!&&`"1(#""2)#\.`Z%x;s~Z~print~g;s/#/\\/g;
s/`(.)(.+?)`(.+?)`/s$1$2$1$3$1g\;/gsx;s;&;(.);g;y^"^$^;print ;