diff --git a/src/utils.py b/src/utils.py index 0d9421e8f..fca8305af 100755 --- a/src/utils.py +++ b/src/utils.py @@ -262,7 +262,7 @@ def perlReToReplacer(s): else: return lambda s: r.sub(replace, s, 1) -_perlVarSubstituteRe = re.compile(r'\$\{([^}]+)\}|\$(\S+)') +_perlVarSubstituteRe = re.compile(r'\$\{([^}]+)\}|\$([a-zA-Z][a-zA-Z0-9]*)') def perlVariableSubstitute(vars, text): def replacer(m): (braced, unbraced) = m.groups() diff --git a/test/test_utils.py b/test/test_utils.py index 8b1e7f2f7..fecef0107 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -183,6 +183,22 @@ class UtilsTest(SupyTestCase): f = utils.perlReToReplacer('s/\b(\w+)\b/\1./g') self.assertEqual(f('foo bar baz'), 'foo. bar. baz.') + def testPerlVariableSubstitute(self): + f = utils.perlVariableSubstitute + vars = {'foo': 'bar', 'b a z': 'baz', 'b': 'c', 'i': 100, + 'f': lambda: 'called'} + self.assertEqual(f(vars, '$foo'), 'bar') + self.assertEqual(f(vars, '${foo}'), 'bar') + self.assertEqual(f(vars, '$b'), 'c') + self.assertEqual(f(vars, '${b}'), 'c') + self.assertEqual(f(vars, '$i'), '100') + self.assertEqual(f(vars, '${i}'), '100') + self.assertEqual(f(vars, '$f'), 'called') + self.assertEqual(f(vars, '${f}'), 'called') + self.assertEqual(f(vars, '${b a z}'), 'baz') + self.assertEqual(f(vars, '$b:$i'), 'c:100') + + def testFindBinaryInPath(self): if os.name == 'posix': self.assertEqual(None, utils.findBinaryInPath('asdfhjklasdfhjkl'))