So if I have file.txt, I want to wait until something new is written to it, and then read it/process it/etc in UNIX

This suggestion of the use of select, is only if you have control over what writes to your files. Otherwise be more specific in your problem description, like adding a code example.

To do what Win32::FileSystem::Watcher does in Windows, on linux, you can use a IO::Select method or what is commonly called file events in a bunch of modules. It is slightly different than an IO::Notify type of watcher, because you actually control and watch the writing to the filehandle, rather than just react to bytes size change or some other file system access controls.

The old way, coming down straight from C, is to use select. Perl has a select statement, see perldoc -f select, or better use the IO::Select module. For instance see file read timeout or Google for "perl io::select". Normally you will see IO::Select used to watch a few handles simultaneously, but you can have select watch just one file.... firing off a subroutine everytime something is available to be read. Here is a simple example of how it would be used on Linux.

#!/usr/bin/perl use warnings; use strict; use IPC::Open3; use IO::Select; my $pid = open3(\*WRITE, \*READ,\*ERROR,"/bin/bash"); my $sel = new IO::Select(); $sel->add(\*READ); $sel->add(\*ERROR); my($error,$answer)=('',''); while(1){ print "Enter command\n"; chomp(my $query = <STDIN>); #send query to bash print WRITE "$query\n"; foreach my $h ($sel->can_read) { my $buf = ''; if ($h eq \*ERROR) { sysread(ERROR,$buf,4096); if($buf){print "ERROR-> $buf\n"} } else { sysread(READ,$buf,4096); if($buf){print "$query = $buf\n"} } } } waitpid($pid, 1); # It is important to waitpid on your child process, # otherwise zombies could be created.

I'm not really a human, but I play one on earth.
Old Perl Programmer Haiku ................... flash japh

In reply to Re: wait until something new is written to it by zentara
in thread wait until something new is written to it by locked_user satishkambam

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.