2009-05-22 11 views
-2

Ich habe im Internet und dem Perl-Doc gesucht und kann nicht die Antwort finden.Was macht -G in Perl?

Hilfe wird geschätzt.

EDIT :: Er fragte mich nach -G, schrieb es auf ein Blatt Papier und als ich sah stumped fragte mich zu gehen, lesen Sie auf die Grundlagen.

+0

Ich kann keine Informationen über -G auch nicht finden. Kannst du uns ein Beispiel zeigen? – JesperE

+2

Jemandes Drähte werden hier gekreuzt. – Schwern

+0

Was war die genaue Frage, fragte er Sie? –

Antwort

2

Es gibt keinen Schalter -G in Perl.

perl -G Nicht erkannter Schalter: -G (-h zeigt gültige Optionen an).

Edit: OK, es gibt nichts mit -G auch nur -g.

-g Die Datei hat das Setgid-Bit gesetzt.

http://perldoc.perl.org/perlfunc.html

Ansonsten ist es Unsinn, und die Frage misphrased ist.

+0

Er meint im Code, kein Schalter: 'print 'Hallo" if -G; ' –

7

Ich stimme JesperE zu, bitte zeigen Sie uns einen Code. Aber soweit ich das sagen kann, das ist, was passiert:

if(-G) { 

Perl dies sieht, erkennt nicht -G, und so behandelt sie als String zurück. Es wird:

if('-G') { 

, die gleich ist:

if(1) { 

so weit So wie ich sagen kann, if(-G) nichts tut. Ich habe es versucht, und es scheint immer wieder wahr zu sein, was meine Hypothese unterstützt. Weitere Unterstützung ist aus dem folgenden Code (getestet auf OS X mit Perl 5.10.0):

use strict; 
use warnings; 

my $var = -G; 
print "$var\n"; 

Zeigt keine Warnungen, kompiliert und ausgeführt, und druckt einfach "-G".

EDIT: Eine Suche ich viel getan haben sollte früher liefert die folgenden von Perldoc der perlop Seite:

Unary „-“ arithmetische Negation führt, wenn der Operand numerisch ist. Wenn der Operand ein Bezeichner ist, wird eine Zeichenfolge zurückgegeben, die aus einem mit dem Bezeichner verketteten Minuszeichen besteht. Andernfalls, wenn die Zeichenfolge mit einem Plus oder Minus beginnt, wird eine Zeichenfolge zurückgegeben, die mit dem umgekehrten Vorzeichen beginnt. Ein Effekt dieser Regeln ist, dass "-barword" der Zeichenkette "-ware" entspricht. Wenn die Zeichenfolge jedoch mit einem nicht alphabetischen Zeichen (ohne "+" oder "-") beginnt, versucht Perl, die Zeichenfolge in eine Zahl umzuwandeln, und die arithmetische Negation wird ausgeführt. Wenn die Zeichenfolge nicht sauber in einen numerischen umgewandelt werden, wird Perl die Warnung Argument geben „die Zeichenfolge“ ist nicht numerisch in Negation (-) an ....

Wie in den Kommentaren erwähnt, B::Deparse scheint zu zeigen, dass Perl if(-G) in if(-'G') konvertiert. Die Dokumentation (und das Verhalten mit print()) stimmen jedoch mit der Dokumentation überein, die besagt, dass sie if(-G) in if('-G') konvertieren soll. Dies ändert das Ergebnis des Programms in keiner Weise.

Allerdings sind subtile Tippunterschiede im Verhalten von unären Operatoren, die 99% der Menschen nur für Zahlen verwenden, nicht das, was ich "grundlegend" nennen würde. Ich glaube nicht, dass irgendjemand die -bareword zu 'bareword' Umwandlung in irgendeiner praktischen Situation verwenden sollte (oder jemals brauchen würde).

+0

Wenn das der Fall ist, sollte der Fragesteller auf den Kopf geschlagen werden. Das ist nicht "die Grundlagen". Es ist eine Trickfrage und nicht einmal eine, die irgendeine nützliche Funktionalität enthüllt. Selbst wenn er sich auf den Filetestoperator -g bezog, würde ich das nicht als "grundlegend" betrachten. –

+0

Ich stimme in beiden Fällen überein, aber das ist die einzige Antwort, die ich herausfinden kann (außer dem -g Dateitest). –

+0

B :: Deparse zeigt, was Perl denkt. Es ist nicht, wenn ('- G') ', sein' if (- 'G') ', das zufällig wahr ist. Wie auch immer, Michael hat Recht. "-g" ist sicherlich nicht "einfach". Ich glaube nicht, dass ich es jemals benutzt habe und ich weiß nicht, warum sich jemand das auswendig lernen würde. – Schwern

2

Ich weiß nicht, über -G aber -g beschrieben here als

-g File has setgid bit set. 
+0

Ich dachte das zuerst, aber ich bin mir nicht sicher, ob er darüber spricht. Zumal der Code 'if (-G) {' keine Fehler oder Warnungen erzeugt. –

1

Dies ist eindeutig eine Verwechslung zwischen [(Test) Optionen und Perl-X-Datei-Tests. -G ist in ersterem (auf meinem BSD-System), aber nicht Letzteres. -G ist eine Nicht-Posix-Erweiterung und ich nehme an, dass Perl nicht alle Erweiterungen enthielt, nur einige. Also wollte er entweder sagen - g oder er meinte [-G $ Datei]; (für eine Obermenge von POSIX [). Es ist auch in meinem Standard-Shell (pdksh) und bash (dem Linux-Standard-Shell, zum größten Teil)

-G in Test oder als Shell hier builtin:

-G Datei Wahr, wenn Datei vorhanden ist und seine Gruppe stimmt mit der effektiven Gruppen-ID dieses Prozesses überein.

0

Eine Antwort sagt: "Ich denke nicht, dass irgendjemand in jeder praktischen Situation die Umwandlung von, Buchstabe zu Buchstabe 'verwenden sollte (oder jemals brauchen würde)."

Dies ist weit verbreitet in einem Stil der benannten Parameter verwendet. Siehe die ehrwürdige CGI für eine:

$cookie1 = $q->cookie(-name=>'riddle_name', -value=>"The Sphynx's Question"); 
$cookie2 = $q->cookie(-name=>'answers', -value=>\%answers); 
print $q->header(
    -type => 'image/gif', 
    -expires => '+3d', 
    -cookie => [$cookie1,$cookie2] 
); 
+1

Der Punkt der -flag Notation ist, dass es das Bareword nicht mit einem eingebauten Perl verwechselt. -values ​​verwechselt nichts mit Werten (% Hash). –

+0

Die führenden Striche hier scheinen wie eine stilistische Verschleppung von Befehlszeilenschaltern. Sie sind nicht notwendig; Das dicke Komma steht auf der linken Seite für Barcodes. –