2013-07-01 4 views
13

dieses Programm Gegeben:Warum übersetzt Perl eine Zecke in einen Doppelpunkt?

use strict; 
use warnings; 

my $zx_size = 32; 
my $x = "$zx_size'h0"; 

Perl sagt mir dies:

Name "zx_size::h0" used only once: possible typo at concat.pl line 7. 
Use of uninitialized value $zx_size::h0 in string at concat.pl line 7. 

Warum?

Es scheint, dass es mehrere Möglichkeiten gibt, den Namespace eines Var anzugeben. Gibt es andere?

Ist es möglich, dieses Verhalten zu deaktivieren?

+0

versuchen, dieses „$ zx_size \ 'h0" (mit umgekehrten Schrägstrich) oder„$ zx_size ‚h0" ; (mit Leerzeichen). Im Wesentlichen müssen Sie die Variable und den Inhalt der Zeichenfolge trennen. Perl denkt, dass zxsize'h0 der Name der Variablen ist. Alternativ können Sie auch "$ zx_size" ausprobieren. "h0" auch. Alles Gute. – Sai

+0

Mögliches Duplikat von [Perl-String, eine Variable in einem String, gefolgt von einem einfachen Anführungszeichen und einem anderen Zeichen, was macht das?] (Http://stackoverflow.com/questions/39360205/perl-string-a-variable-in-a- String - gefolgt von einem einzelnen Zitat und einem anderen - Chara) – Oktalist

Antwort

19

Das alte Paket Begrenzer war ein Apostroph ', die ursprünglich verwendet wurde, zu erleichtern t Übergang zu Perl für Ada-Programmierer. Es wurde durch :: ersetzt, um besser lesbar zu sein und den Übergang von C++ - Programmierern zu erleichtern.

Es wird weiterhin aus Gründen der Abwärtskompatibilität unterstützt, aber Sie können Ihren Skalar in {..} einfügen, damit er korrekt interpoliert wird.

my $x = "${zx_size}'h0"; 

oder

my $x = "$zx_size\'h0"; 
+1

Oder 'my $ x = $ zx_size. "'h0"; ' –

+0

seltsam. Die Antwort wurde vor 21 Stunden gepostet, aber der obige Kommentar wurde vor 20 Stunden gemacht? FEHLER! – Sai

+1

Das ist wirklich merkwürdig. –

4

Gelesen perlmod. Der zweite Absatz. Und nein, es gibt keine Möglichkeit, es auszuschalten, zumindest für den Moment. Theoretisch könnte jemand ein no feature Pragma dafür schreiben, aber es ist seit 20 Jahren so gewesen, ohne zu viele Probleme zu verursachen ...

11

Das einfache Anführungszeichen ' wurde von früheren Perls benutzt, um Paketbereich in der gleichen Weise wie zu bezeichnen ::, und es wird immer noch für die Abwärtskompatibilität unterstützt.

zu tun, was Sie wollen, müssen Sie die ${} Syntax verwenden Perl zu sagen, wo die Kennung endet und die wörtliche beginnt:

"${zx_size}'h0" 

Beachten Sie, dass dies die gleiche Sache ist, würden Sie tun müssen wenn Sie auf den Wert von $zx_size wollte von keinem anderen wörtlichen Zeichen folgt, die in einer Kennung erscheinen legal ist:

"${zx_size}foo" 
Verwandte Themen