Hi,
i have the following script:

#!/bin/perl -w
use strict;

$ENV{"PATH"} = ".;" . $ENV{"PATH"};

print "Revesing the history file...\n";
print reverse <> history.txt > history_rev.txt;
print "Reversing the XpressClients file\n";
print reverse <> XpressClients.txt > Xp_clients.txt;
print "Parsing the XpressClients file...\n";
require 'Clients.pl' Xp_clients.txt > clients_file.txt;

the files are located in the same dir as the script.
the problem is - when i run the script i get this error:
Bareword found where operator expected at ./Filesx_Check.pl line 24, near "<> history"
(Missing operator before history?)

i get this error with "history", "XpressClients" and "Xp_clients", i.e, every file i mention.
i tried adding the directoy to PATH but that didn't help. i even changed the files premissions to rwx, but again, to no avail.

i'm seriously frustrated.
ANY suggestion will be appreciated.
Thanks!

Recommended Answers

All 8 Replies

When you use print, you should quote strings.

print reverse <>, "history.txt > history_rev.txt\n";

On the other hand, if you are expecting perl to know those are input and output files you must not have been awake in perl class. ;)

that's the wired thing - it works fine just the way it is in my computer, but in another computer it prints the error message.

can you point me to what im doing wrong?
do i need to open the files and insert them to arrays?

Maybe it will work if you remove "strict"

No, i tried that too.
It is possible, im just not sure why it doesnt work...
How else can i tell perl these are input and output files? any idea?
Thnaks

I did a little horsing around.

I can get reverse to work with arrays:

print reverse(@array);

But, what you are trying uses standard input (<>). If you want to do that, I believe you have to run perl via command line:

perl -e 'print reverse <>' file1 file2 file3 ....

The above is taken from this page: http://www.unixguide.net/unix/perl_oneliners.shtml

To do what you want, within a perl script, may require opening files and reading them:

open(FILE_HANDLER,"/path/to/file");
my @lines = <FILE_HANDLER>;
close(FILE_HANDLER);

Hope that helps.

Hi Stylish,

You did help my and you're wright.
In order to do :
perl -e 'print reverse <>' sourcefile.txt > 'targetfile.txt'
In a perl script i need to open files.
Problem is, that oneliner (perl -e...) is faster and prints the file, as is, backwords. In perl script when i do:
print TARGET reverse <@sourcefile>; (when TARGET is the file handler)
I get the file without spaces. for example, if it was:
daniweb forums
are helpful.
It will be :
daniwebforumsarehelpful.

I'll to play with it for a while, maybe things will start working wright.
Thank you both!
To be continued...

open(IN, "/path/to/file");
open(OUT,">",'path/to/outfile');
print OUT reverse <IN>;
close(IN);
close(OUT);

The only problem is that if there is not a newline at the end of the last line of the IN file, the reversed OUT file will have the first and second lines appended together.

Reverse ("@sourcefile") - made all the difference.
Works great.
Thank KevinADC & Stylish!

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.