From e207443833ac86ce1e9144488c4a3bbe49be8c95 Mon Sep 17 00:00:00 2001 From: Thomas Schoebel-Theuer Date: Mon, 18 Jan 2016 13:12:37 +0100 Subject: [PATCH] marsadm: fix binary operators =~ and "match" --- docu/mars-manual.lyx | 18 +++++++++++++++++- userspace/marsadm | 12 ++++++------ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/docu/mars-manual.lyx b/docu/mars-manual.lyx index 0c6fe196..e1e29c70 100644 --- a/docu/mars-manual.lyx +++ b/docu/mars-manual.lyx @@ -10062,7 +10062,23 @@ opts \emph default } \family default -Checks whether +or +\family typewriter +%match{ +\emph on +string +\emph default +}{ +\emph on +regex +\emph default +}{ +\emph on +opts +\emph default +} +\family default + Checks whether \family typewriter \emph on string diff --git a/userspace/marsadm b/userspace/marsadm index f8f4144b..fc2506e5 100755 --- a/userspace/marsadm +++ b/userspace/marsadm @@ -2626,9 +2626,8 @@ sub eval_fn { } return $number; } - if (/^([<>]=?|[!=]=)$/) { # comparisons + if (/^([<>]=?|[!=]=)$/) { # numeric comparisons my $op = $1; - $op = "~" if $op eq "match"; my $n1 = make_numeric(parse_macro($arg1, $env)); my $arg2 = shift; my $n2 = make_numeric(parse_macro($arg2, $env)); @@ -2641,9 +2640,9 @@ sub eval_fn { if (/^!=$/) { return $n1 != $n2; } ldie "bad comparison operator '$op'"; } - if (/^(lt|gt|le|ge|eq|ne|match)$/) { # binary operators + if (/^(lt|gt|le|ge|eq|ne|match|=~)$/) { # binary string operators my $op = $1; - $op = "~" if $op eq "match"; + $op = "=~" if $op eq "match"; my $n1 = parse_macro($arg1, $env); my $arg2 = shift; my $n2 = parse_macro($arg2, $env); @@ -2659,8 +2658,9 @@ sub eval_fn { my $arg3 = shift; $opts = parse_macro($arg3, $env) if defined($arg3); # unfortunately standard regex operators don't seem to accept variable options, so we use eval() - eval("\$n1 =~ m{$n2}$opts"); - return $n1; + my $result = eval("\$n1 =~ m{$n2}$opts"); + return "" unless defined($result); + return $result; } ldie "bad binary operator '$op'"; }