By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
438,177 Members | 976 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 438,177 IT Pros & Developers. It's quick & easy.

Reopening file only if it was updated using regular open

P: 5
I'm trying to reopen a certain file but only if it's updated:
The problem is when i try to open a file (after it was changed and saved by me)for reading second time, i get nothing, like the file is empty but it's not.
The filehandle is empty.Why?
DOn't have a clue.
The code is below.
can some one help?
Expand|Select|Wrap|Line Numbers
  1. $last_acces=time;
  2. while($end_ctsc)
  3. {
  4. $full_path_file=lastmodifiedfile("path");
  5. open (DATA_log ,$full_path_file);
  6. $file_stat = stat(DATA_log);
  7. $new_acces=$file_stat->mtime;                
  8. close DATA_log;
  9. $Sub_is=$new_acces-$last_acces;
  10. if ($Sub_is)
  11. {
  12. $last_acces=$new_acces;
  13. $i=0;
  14. $full_path_file=lastmodifiedfile("path");
  15. open (DATA_log ,$full_path_file)||print("could not open the log");
  16. @file_log=<DATA_log>;
  17. close DATA_log;
  18. $sizefile_log = @file_log;
  19. print "the i is: $i, the sizefile_log is $sizefile_log\n";
  20. while ($i!=$sizefile_log)
  21. {
  22.   #file handling 
  23. }
  24. }
Oct 27 '08 #1
Share this Question
Share on Google+
4 Replies

Expert 100+
P: 971
After you open a file add a die statement after to make sure you did not have any problems.
Expand|Select|Wrap|Line Numbers
  1. open(my $file, '<', $file_to_open) || die "Can't open $file_to_open: $!\n";
Oct 27 '08 #2

P: 5
Thanks for the response.
I used $file as file handle,had the same result:
First time it's working the second time it's empty.
When i write second time i mean it could 500 time because i open the file and reopen it to check if it was updated using stat function.The funny thing is that i'm able to recognize if it was updated or not using open with filehandle but when i want to spread the data to an array i get it empty.
Any ideas?
Oct 27 '08 #3

Expert 2.5K+
P: 4,059
One potential problem is here:

Expand|Select|Wrap|Line Numbers
  1. $file_stat = stat(DATA_log);
the stat() function returns a list so you have to assign its value to a list or array:

Expand|Select|Wrap|Line Numbers
  1. @stat = stat(DATA_log);
Later you use $file_stat as if its an object:

Expand|Select|Wrap|Line Numbers
  1. $new_acces=$file_stat->mtime;
Are you using a module that creates an object?

You very much need to add "strict" and "warnings" to your perl program and note all the errors and fix them and post back here if you have more questions.

Expand|Select|Wrap|Line Numbers
  1. use strict;
  2. use warniings;
  3. use diagnostics;
diagnostics will return more verbose nessages concerning the errors or warnings but it is optional.
Oct 27 '08 #4

Expert 100+
P: 971
Here is a sample script that will create a test file if it does not exist. Then if you run it again it will modify the contents of the file and display the data.

When you want to append a file then you must open it in append mode. Otherwise it will erase all of the data.

Also, this sample script is intended to be run from a browser.

Expand|Select|Wrap|Line Numbers
  1. #! /usr/bin/perl -T
  3. use strict;
  4. use warnings;
  6. use CGI::Carp qw/fatalsToBrowser/;
  8. print "Content-type: text/html\n\n";
  10. my $file_to_open = './sample_data_file.txt';
  11. my $modified_time  = (stat($file_to_open))[9];
  14. # If the target file does exists create it 
  15. if (not -e $file_to_open) {
  16.     open(my $fh, '>', $file_to_open) || die "Can't open $file_to_open.  Error Message: $!\n";    
  17.     print $fh "Some message\n";
  18.     close($fh);
  20.     print 'File was created';
  21. }
  23. # If modified then update it
  24. if ($modified_time) {
  25.     open(my $fh, '>>', $file_to_open) || die "Can't open $file_to_open.  Error Message: $!\n";    
  26.     print $fh "Some new message\n";
  27.     close($fh);    
  29.     print 'File was modified', "<br /><br />";
  30. }
  32. # Print modified contents
  33. if ($modified_time) {
  34.     open(my $fh, '<', $file_to_open) || die "Can't open $file_to_open.  Error Message: $!\n";
  35.     print "Modified Contents:<br />";
  36.     while (<$fh>) {
  37.         chomp;
  38.         print $_, "<br>";
  39.     }
  40.     close($fh);
  41. }
  44. 1;
Pragmas (perl 5.10.0) used :
  • strict - Perl pragma to restrict unsafe constructs
  • warnings - Perl pragma to control optional warnings
Core (perl 5.10.0) Modules used :
  • CGI::Carp - CGI routines for writing to the HTTPD (or other) error log

I just wanted to use this cool tool. :)

Oct 28 '08 #5

Post your reply

Sign in to post your reply or Sign up for a free account.