http://qs321.pair.com?node_id=11137419


in reply to Bareword issue with Perl 5.34

I'm not sure why the code would work in Perl 5.28 as given, but for your problem see the Module Options of Win32::OLE. The new syntax to use is

use Win32::OLE; Win32::OLE->Options(CP => Win32::OLE::CP_UTF8);

Alternatively, you can make the CP_UTF8 constant known by importing it explicitly from Win32::OLE:

use Win32::OLE 'CP_UTF8'; Win32::OLE->Options(CP => CP_UTF8);

Replies are listed 'Best First'.
Re^2: Bareword issue with Perl 5.34
by Anonymous Monk on Oct 11, 2021 at 17:24 UTC

    Thank you for your reply. I am starting to think that the issue is somewhere else. My .pl script should run both on macOS and on Windows. Obviously, when on it is run on macOS, the Win32::OLE should be skipped. I solved this like this:

    use if $^O eq 'MSWin32', 'Win32::OLE'; if ( $^O eq 'MSWin32' ) { $Win32::OLE::CP = 'CP_UTF8'; }

    Or compacter:

    use if $^O eq 'MSWin32', 'Win32::OLE::CP' => 'CP_UTF8';

    On macOS the scripts load correctly and Win32::OLE stuff is skipped. If I use the same without '' or any of your suggestions, I get the Bareword "CP_UTF8" error. Am I everseeing something?

      I think you want

      use if $^O eq 'MSWin32', 'Win32::OLE', 'CP' => 'CP_UTF8';

      That is still the "old" way of using Win32::OLE. The new way would be something like:

      use if $^O eq 'MSWin32', 'Win32::OLE'; if( $^O eq 'MSWin32' ) { Win32::OLE->Options( CP => 'CP_UTF8' ); # or maybe # Win32::OLE->Options( CP => Win32::OLE::CP_UTF8 ); }