use strict; use warnings; use Win32::API 'WriteMemory'; use Encode 'encode'; Win32::API-> Import( 'kernel32', 'HGLOBAL GlobalAlloc( UINT uFlags, SIZE_T dwBytes )' ) or die; Win32::API-> Import( 'kernel32', 'UINT_PTR GlobalLock( HGLOBAL hMem )' ) or die; Win32::API-> Import( 'kernel32', 'BOOL GlobalUnlock( HGLOBAL hMem )' ) or die; Win32::API-> Import( 'kernel32', 'HGLOBAL GlobalFree( HGLOBAL hMem )' ) or die; Win32::API-> Import( 'user32', 'BOOL OpenClipboard( HWND hWndNewOwner )' ) or die; Win32::API-> Import( 'user32', 'HANDLE SetClipboardData( UINT uFormat, HANDLE hMem )' ) or die; Win32::API-> Import( 'user32', 'BOOL CloseClipboard( )' ) or die; my $str = "\x{05d0}\x{05d1}\x{05d2}"; # Alef Bet Gimel my $buf = encode( 'UTF16LE', $str ) . "\0\0"; my $h = GlobalAlloc( 2, length $buf ) or die; # GMEM_MOVEABLE my $p = GlobalLock( $h ) or die; WriteMemory( $p, $buf, length $buf ); GlobalUnlock( $h ); OpenClipboard( 0 ) or die; SetClipboardData( 13, $h ) or die; # CF_UNICODETEXT CloseClipboard() or die; GlobalFree( $h ); #### use Encode 'encode'; my $str = encode 'CP1255', "\x{05d0}\x{05d1}\x{05d2}"; system "echo $str| clip"; #### use strict; use warnings; use Encode 'encode'; my $str = encode 'CP1255', "\x{05d0}\x{05d1}\x{05d2}"; system "echo $str";