Thread Warum erzeugt ( $5 // 3 ) ein Syntaxfehler? (15 answers)
Opened by SMarc at 2017-02-05 17:45

Gast SMarc
 2017-02-05 17:45
#186038 #186038
Hallo,

ich bin noch Anfänger in Perl, bitte habt Nachsicht :-)

Ich dachte, "$x // $y" bedeutet das gleiche wie "defined $x ? $x : $y".
Und ich dachte, das könnte ich nach einer RegExp auch mit $1, $2 ... etc. formulieren.

Aber im folgenden Quelltext (ein Auszug) bekomme ich einen Syntaxfehler in der Switch-Anweisung der 2. Funktion, wenn ich in der ersten Funktion den Ausdruck "($5 // 3)" verwende. Schreibe ich stattdessen "defined $5 ? $5 :3", dann gibt es keinen Fehler.

Könnt Ihr mir das erklären?

Ich nutze perl 5.24.0 unter Win10 und perl 5.10.1 unter Linux/Debian.

Danke,
Marc

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package main;

use strict;
use warnings;
use POSIX qw(strftime floor);
use Scalar::Util qw(looks_like_number);
use Switch;

sub MyFhem($) {
my ($cmd) = @_;

if ( $cmd =~ /([-_\w]+):([-_\w]+):([-_\w]+)(:([-_\w]+))?/ ) {
$cmd = "set $1 $2 $3";
my $check = { dev => $1, reading => $2, level => $3, retry => 0 };
smInternalTimer( "c_".$1."_".$2, time+( $5 // 3 )*60, "CheckActionDone", $check, 1 );
}

fhem($cmd);
}

my ( $notifytable_sec, $notifytable_min, $notifytable_hour, $notifytable_mday, $notifytable_mon,
$notifytable_year, $notifytable_wday, $notifytable_yday, $notifytable_isdst);

sub MyReadingsVal($$$) {
my ($dev, $rdg, $def) = @_;
my $r='';

if ( $dev eq "TIME" ) {
switch ($rdg) {
case 'hour' { $r = $notifytable_hour }
case 'hfhour' { $r = $notifytable_hour << 1 + ( $notifytable_min > 29 ? 1 : 0 ) }
case 'qhour' { $r = $notifytable_hour << 2 + floor( $notifytable_min/15 ) }
case 'minute' { $r = $notifytable_min }
case 0 { $r = $notifytable_min }
else { $r = undef }
}
} else {
$r = ReadingsVal( $dev, $rdg, $def );
}

return $r;
}

Last edited: 2017-02-05 19:50:07 +0100 (CET)

View full thread Warum erzeugt ( $5 // 3 ) ein Syntaxfehler?