From 6146d71465314a4196eaa0852116aae3729f9c43 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sven=20Sch=C3=B6ling?= Date: Mon, 1 Jun 2015 16:07:32 +0200 Subject: [PATCH] ClientJS: Values nicht trimmen MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Wenn numerische Werte (also IVs und NVs) per Regex getrimmt werden, wird dabei das POK Flag gesetzt, das anzeigt, dass der Scalar auch ein valider String ist. JSON kann dann nicht mehr unterscheiden welcher Typ der Scalar ist, und nimmt String. Das führt aber dazu, dass _alle_ Zahlen als Strings encodiert werden. Auch das wäre prinzipiell kein Problem, ausser dass Javascript keine separaten Operatoren für Strings und Zahlen hat. json.val1 + json.val2 wird also immer als concat aufgefasst und nicht als Addition, und json.val ? true : false ist immer true, weil "0" und "1" beide true in Javascript sind. --- SL/ClientJS.pm | 1 - 1 file changed, 1 deletion(-) diff --git a/SL/ClientJS.pm b/SL/ClientJS.pm index d4775b830..c12b9ea24 100644 --- a/SL/ClientJS.pm +++ b/SL/ClientJS.pm @@ -152,7 +152,6 @@ sub action { foreach my $idx (0..$num_args - 1) { # Force flattening from SL::Presenter::EscapedText and trim leading whitespace for scalars $args[$idx] = "" . $args[$idx] if ref($args[$idx]) eq 'SL::Presenter::EscapedText'; - $args[$idx] =~ s/^\s+// if !ref($args[$idx]); } push @{ $self->_actions }, [ $method, @args ]; -- 2.20.1