Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Writing to a packaged file with PerlApp

by perl_seeker (Scribe)
on Nov 11, 2003 at 11:28 UTC ( [id://306155]=perlquestion: print w/replies, xml ) Need Help??

perl_seeker has asked for the wisdom of the Perl Monks concerning the following question:

Hello,
I've written some of this stuff in earlier posts, but it's required here too.

I have been trying to create an exe file of a Perl script and am using PerlApp which comes with ActiveState's PDK 5.0.
I'm using PerlApp to pack a .pl file along with text files and .pm's
perlapp myscript.pl --add mypm.pm --bind mytextfile.txt[text,extract,f +ile=c:\test,mode=0777]
Once we run the .exe file,the text files packed with the .exe get extracted in the c:\windows\temp folder in this way:
c:\windows\temp\pdk-username-856877
the process id gets appended to the folder name.
Suppose I use stmts like this to open mytextfile.txt in myscript.pl
open TF,'>mytextfile.txt' or die $!;
My .pl script can't find the text file. I keep getting this error:
Tk::Error: No such file or directory at test.pl line 183.[\&main::chfi +le]
According to the PerlApp docs, if we use the 'extract' option with --bind:
The bound file is extracted into the TEMP directory upon application s +tart. It will be deleted when the application terminates. The extract +ion directory will be added to the PATH environment variable (as well + as to the LD_LIBRARY_PATH variable on Unix). It will also be added t +o the front of @INC.
But the temp. folder in which the text files are extracted is not getting added to the PATH environment variable.
I tried adding it to PATH , while not quitting the application,but that also didn't work.What is the problem here? Please help!Thanks in advance.
:)

2006-01-19 Retitled by Arunbear, as per Monastery guidelines
Original title: 'PerlApp'

Replies are listed 'Best First'.
Re: Writing to a packaged file with PerlApp
by batkins (Chaplain) on Nov 11, 2003 at 14:00 UTC
    Your PATH and @INC are irrelevant. open relies only on the path information you pass to it. However, since you're using PerlApp, you need to use a utility function to extract the file from the EXE. Something like this:
    my $filename = PerlApp::extract_bound_file($datafile); open my $fh, ">$filename";
    I'm not sure why you're writing to the file, though, because it's really only a temporary file. You may want to rethink that. Files bundled into the EXE are designed for reading - changes you make won't end up back in the EXE. Instead, the temporary file will be changed.

    There's more information here.

    Are you sure it was a book? Are you sure it wasn't.....nothing?
      Hello,
      thanks for the reply.

      >open relies only on the path information you pass to it.

      Here I cannot specify the path name since a process id also gets attached to the temp. folder name at run time e.g
      c:\windows\temp\pdk-username--(what process-id to write here?)\mytextf +ile.txt
      >you need to use a utility function to extract the file from the EXE

      I've tried using code like this in my .pl
      sub chfile { ....... my $datafile = "myfile.txt"; my $filename = PerlApp::extract_bound_file($datafile); die "$datafile not bound to application\n" unless defined $filename; my $fh="LEX"; open($fh,'$filename') or die "Can't open $datafile $filename)\n"; while(<LEX>){ ...... } }
      When I create the .exe using PerlApp and run it , the exe cannot open myfile.txt. I keep getting this error:
      Tk:Error:Can't open myfile.txt <c:\test\pdk-myname--121077199/myfile.t +xt>[\&main::chfile]
      What am I doing wrong here?

      >I'm not sure why you're writing to the file, though, because it's really only a temporary file.

      PerlApp treats the attached text files as temporary ones, but in the application I've written they are not temorary.
      The .pl script needs to read data from the text file,process it, and also update it (append to it).Each time the .exe
      runs, the .pl script needs to use the updated version of the text file, that was created in the previous run.

      Is there no way to get around this?
      Thanx,
      :)
Re: Writing to a packaged file with PerlApp
by chanio (Priest) on Nov 12, 2003 at 04:07 UTC
    Did you try to list the name of that temporary folder?

    Remember that if you are using WinXP there is another temp folder at your personal folder.

    While you are running the app, did you look at that folder to see if it has done what you expected?

      Hello,
      thanks for the reply.
      The temp. folders do appear in the directory listing.If I don't use bound functions,but simply copy all the text
      files and other files from the temp. folder to the current folder, the 'append' to the text file works.

      It's just a matter of the path not being found.The above procedure does not work with bound functions.
      Thanx,
      :)

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://306155]
Approved by EvdB
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having a coffee break in the Monastery: (1)
As of 2024-04-25 02:03 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found