Backticks and while

I am fairly new to perl and would like to know if the following would be ok, or if there was  a better way to do this. I tried open but $! gives me "No such file or directory" when the command works fine with either system or back ticks. also should I flush the data?
while(`$cmd`) {
print ".";
sleep(5);
}

Open in new window

lrudorAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

TintinCommented:
It's always best to describe what you are actually trying to do.

Perhaps, you want something like
open CMD, "/some/command|" or die "Can not run command $!\n";
 
while (<CMD>) {
  print;
  sleep(5);
}

Open in new window

0
lrudorAuthor Commented:
Tintin, thanks for your response.

here is the command that gets run:

"C:\video tools\mencoder\mencoder.exe" -sid 0 -vid 0 -nosound -o ./vid.264 -of rawvideo -ovc x264 -x264encopts bitrate=900:threads=auto:pass=1 -vf scale=704:400 -passlogfile ./pass.log -subfont-text-scale 3 "F:\videos\test.mkv"

so below returns:

"Unable to run the command. No such file or directory at"...

while system or backticks will run the command just fine.

my $cmd = '"C:\video tools\mencoder\mencoder.exe" -sid 0 -vid 0 -nosound -o ./vid.264 -of rawvideo -ovc x264 -x264encopts bitrate=900:threads=auto:pass=1 -vf scale=704:400 -passlogfile ./pass.log -subfont-text-scale 3 "F:\videos\test.mkv"';
 
print $cmd;
open CMD, $cmd or die "Unable to run the command. $!";
while (<CMD>) {
  print '.';
  sleep(5);
}

Open in new window

0
TintinCommented:
You left out the most important part, the | symbol at the end of the command.  Appended to the command it means pipe the output, prepended means pipe to the input.

Again, I'll ask you to describe what you are trying to achieve.

Looking at your code, I suspect what you *really* want to do is output dots while you are encoding videos?  Correct?  If so, then I would suggest a completely different approach.
my $cmd = '"C:\video tools\mencoder\mencoder.exe" -sid 0 -vid 0 -nosound -o ./vid.264 -of rawvideo -ovc x264 -x264encopts bitrate=900:threads=auto:pass=1 -vf scale=704:400 -passlogfile ./pass.log -subfont-text-scale 3 "F:\videos\test.mkv"';
 
 
open CMD, "$cmd|" or die "Unable to run the command. $!";
while (<CMD>) {
  print '.';
  sleep(5);
}

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
lrudorAuthor Commented:
Sorry for being so vague in my description, but yes that's what I am trying to achieve, and how would you going about doing it? I was just trying to create something simple, its really the first time I have done anything in perl.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Perl

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.