2016-08-09 6 views
0

Mein Problem ist, dass der Rückgabewert im Drucken nicht in einen Wert übersetzt wird.Kann nicht erhalten korrekte Rückgabewert in sprintf Funktionsaufruf

Ich habe den folgenden Code in einer Testdatei.

#!/usr/bin/perl -I/srv/www/jonathan/m/www  
my $var = sprintf("$%.1f lbs",(77*2.20462)); 
print $var; 

Seine Rückkehr: 0.1f anstelle des Wertes i sehen müssen.

Was mache ich hier falsch? Ich bin ein Perl-Neuling.

+1

Entfernen Sie das '$' Zeichen, für: 'sprintf ("%. 1f lbs ", ...)'. Siehe ['sprintf'] (http://perldoc.perl.org/functions/sprintf.html). – zdim

+0

Was möchten Sie drucken? Das '$' benötigt eine Argumentposition davor, aber Sie geben nicht an, welches Argument. – verbose

Antwort

1

Perl verwendet dolar ($) Symbol eine skalare Variable zu deklarieren, müssen Sie das $ Symbol aus der sprintf entfernen.

korrigierte Code

my $var = sprintf("%.1f lbs",(77*2.20462)); 
print $var; 

Ausgang

169.8 lbs 
+0

Das Ändern der Anführungszeichen in einfache Anführungszeichen ist einfacher und ändert die Ausgabe nicht. –

+0

Es ist eine der Möglichkeiten zu vermeiden, $ Symbol als Variable und ich bin mir nicht sicher über die Ausgabeanforderung. Ich glaube, der Fragesteller war nur über den Wert interessiert. – Arijit

+0

Sie könnten Recht haben, als er Ihre Antwort akzeptierte. Aber du hast es erraten. Ich würde immer annehmen, dass die Person, die die Frage stellt, weiß, welche Ausgabe sie wünscht, und würde eine Antwort geben, die die ursprüngliche Ausgabe über eine Ausgabe reproduziert, die das nicht tut. –

2

Ihr Problem ist, dass Perl interpretiert "$%. 1f" als Variable $% von ".1f" gefolgt. $% ist eine spezielle Perl-Variable, die "Die aktuelle Seitennummer des aktuell ausgewählten Ausgabekanals" enthält (siehe perlvar) und die den Wert 0 hat. Daher wird die Zeichenfolge "0.1f" ausgedruckt.

Es gibt einige Möglichkeiten, dies zu umgehen.

Sie können das Dollarzeichen entfernen: sprintf("%.1f lbs",(77*2.20462)). Aber das ändert die angezeigte Zeichenfolge.

Sie können dem Dollar entkommen, um Perl zu sagen, dass es nicht speziell ist: sprintf("\$%.1f lbs",(77*2.20462)).

Aber ich denke, es gibt eine bessere Lösung. Perl behandelt Dollarzeichen als Sonderzeichen in Strings mit doppelten Anführungszeichen. Aber es gibt keinen Grund dafür, dass Ihre Zeichenfolge doppelt zitiert wird. Ändern Sie einfach Ihre Formatzeichenfolge, um einfache Anführungszeichen zu verwenden: sprintf('$%.1f lbs',(77*2.20462)).

Das letzte ist die Lösung, die ich verwenden würde.