1

use Inline Python => <<END;
var_py = "test"

END
my $var1 = "from_perl";
print "var1 $var1\n";
print "variably from py $var_py\n";

Output:

var1 from_perl

variably from py

I get empty value for the python variable defined in Inline Python. Can someone please suggest how to read variables defined in python from perl

siri
  • 713
  • 3
  • 11
  • 24

1 Answers1

3
use Inline Python => ( <<'__EOS__' =~ s/^[ ]{3}//mgr );

   import sys

   var_py = "test"

   def get_var_py():
      return var_py

   def _get_global_var(name):
      name = name.decode('UTF-8')
      return globals()[name]

   def _get_module_var(mod_name, var_name):
      mod_name = mod_name.decode('UTF-8')
      var_name = var_name.decode('UTF-8')
      return getattr(sys.modules[mod_name], var_name)

__EOS__

sub get_global_var { my @args = @_; utf8::encode($_) for @args; _get_global_var(@args) }
sub get_module_var { my @args = @_; utf8::encode($_) for @args; _get_module_var(@args) }

say "Variable from py: " . get_var_py();
say "Variable from py: " . get_global_var('var_py');
say "Variable from py: " . get_module_var('__main__', 'var_py');

Output

Variable from py: test
Variable from py: test
Variable from py: test
ikegami
  • 367,544
  • 15
  • 269
  • 518
  • Hi , I just gave an example of one variable, I have multiple such variables defined as constants in a python module and wants to access them from perl. Is there any way? – siri Jan 19 '21 at 12:21
  • Added to answer. [Ref](https://stackoverflow.com/q/9437726/589924) – ikegami Jan 19 '21 at 12:38