http://www.perlmonks.org?node_id=333500


in reply to Clipboard transform keys

For extra added fun, and laziness, add the Win32::Guitest Module into the mixture. That way you can use SendKeys() to send a copy and or paste, and only have to push your double bucky.

For this to work properly, you need to either add an extension for windowless perl scripts (i.e. using wperl) or change the batch file to call on wperl.

I have noticed a few things in Win32::Clipboard and Win32::GUITest that can bite you if you're not careful, first, it doesn't get the magic line-break translation that files and other IO operations do, so your linebreaks (mine were at least) will likely be \r\n instead of just \n. It may or may not matter according to where you are putting the output (my Email client doesn't much like just one or the other). Also apparenly, chomp only cut's off the \n, so you've gotta watch for that. And in ::GUITest, with the Sendkeys() you have to use lowercase for ctrl+c and ctrl+v, else you may end up not getting the effect you expected.

And now, a sample piece of code for making ordered lists, nice and easy, it's even set up so you can run it over pieces of text that have already been tagged, so you can make nested lists.

#!perl use Win32::GuiTest qw(SendKeys); use win32::Clipboard; my $CLIP = Win32::Clipboard(); SendKeys("^c"); my $alter = $CLIP->Get(); my @alter = split /\r\n/, $alter; foreach (@alter) { if (/\W/) { $_ = "<li> $_ </li>" if !/<li>/; $_ .= "\r\n"; } else { $_="\r\n"; } } $alter = join("",@alter); $alter = "<ol>\r\n".$alter."</ol>"; $CLIP->Set($alter); SendKeys("^v");