NAME

Win32::VBScript - Run Visual Basic programs

DESCRIPTION

This module allows you to invoke code fragments written in Visual Basic (or even JavaScript) from within a perl program. The Win32::OLE part has been copied from Inline::WSC.

SYNOPSIS

use strict;
use warnings;

use Win32::VBScript qw(:all);

# This is the procedural interface:
# *********************************

my $p1 = compile_prog_js ([ qq{WScript.StdOut.WriteLine("Bonjour");} ]); cscript($p1);
my $p2 = compile_prog_vbs([ qq{WScript.StdOut.WriteLine "Hello"}     ]); cscript($p2);

# This is the OO interface:
# *************************

compile_prog_js ([ qq{WScript.StdOut.WriteLine("Test1");} ])->cscript;
compile_prog_vbs([ qq{WScript.StdOut.WriteLine "Test2"}   ])->cscript;

# And with wscript, of course, you can use MsgBox:
# ************************************************

compile_prog_vbs([ qq{MsgBox "Test3"} ])->wscript;

# You can even define functions in Visual Basic...
# ************************************************

my $t1 = compile_func_vbs([ <<'EOF' ]);
  ' Say hello:
  Function Hello(ByVal Name)
    Hello = ">> " & Name & " <<"
  End Function

  ' Handy method here:
  Function AsCurrency(ByVal Amount)
    AsCurrency = FormatCurrency(Amount)
  End Function
EOF

# ...or even JavaScript...
# ************************

my $t2 = compile_func_js([ <<'EOF' ]);
  function greet(name) {
    return "Greetings, " + name + "!";
  } // end greet(name)
EOF

# ...and call the functions later in Perl:
# ****************************************

print 'Compiled functions are: (',
  join(', ', map { "'$_'" }
  sort { lc($a) cmp lc($b) } $t1->flist, $t2->flist),
  ')', "\n\n";

{
    no strict 'refs';

    *{'::hi'}  = $t1->func('Hello');
    *{'::cur'} = $t1->func('AsCurrency');
    *{'::grt'} = $t2->func('greet');
}

print hi('John'), ' gets ', cur(100000), ' -> ', grt('Earthling'), "\n\n";

AUTHOR

Klaus Eichner <klaus03@gmail.com>

COPYRIGHT AND LICENSE

Copyright (C) 2016 by Klaus Eichner

All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the artistic license 2.0, see http://www.opensource.org/licenses/artistic-license-2.0.php