Fellow Monks,

Is there a way to determine on a windows platform if a perl script is invoked by double-clicking on the file, through the "File association" ?

My issue is that when I run from a DOS prompt and my script provides logging to STDOUT, the logging is visible after the script ends. When I double-click, the perl script starts in its own DOS box, outputs its logging to STDOUT, finishes, and the DOS box vanishes. I end up having to put:

print "Hit <Enter> to continue\n"; my $y = <STDIN>;
at the end of all my scripts. I want that code to be conditional on being invoked from a double-click file association.

thanks for you help,

- j

Update:

I was having trouble with the ouse.pm solution. It's good for double-clicking. However, if I invoke a script from the command line as:
> foo.pl
instead of
> perl foo.pl
I get the wait condition in the first case because the file association is still being used.

I updated ouse.pm to use the Win32::Process::Info module to see if the parent process is Windows Explorer. UPdate 2: forgot a line
=head1 NAME ouse.pm =head1 SYNOPSIS perl -Mouse file.pl =head1 DESCRIPTION Install in your perl/lib or perl/site/lib directory in a file named "ouse.pm". Then enter the following commands: assoc .pl=Perl ftype Perl=C:\Progra~1\perl\bin\perl -Mouse "%1" %* Then clicking on a *.pl file will cause the script to run in a new window but the window will (usually) not close when the script finishes. =head1 AUTHOR tye http://perlmonks.org/index.pl?node_id=162087 =cut use Win32::Process::Info; END { #-- find the parent process; my $pi = Win32::Process::Info->new(); my @info = $pi->GetProcInfo ( $$); my @pinfo = $pi->GetProcInfo ( @info[0]->{ParentProcessId} ); #-- see if the parent process is the windows explorer. if ( $pinfo[0]->{CommandLine} =~ /explorer/i ) { eval " use Term::ReadKey; "; unless($@) { print "Press any key to close..."; ReadMode(3); ReadKey(); ReadMode(0); } else { print "Press ENTER to close: "; <STDIN>; } } } 1;

In reply to Windows .pl file assoc vs. cmd prompt by jimbojones

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.