BIOM01 has asked for the wisdom of the Perl Monks concerning the following question:
So, as the following code will show, I'm pretty new to Perl. However, whenever I learn something new, I always try to experiment with what I know. However, for some reason, this experiment just isn't working...
#! usr/bin/perl
$count = 0;
if ($count <= 20) {
print "Hello World!\n";
$count += 1;
} else {
print "Wait, that's it?\n";
}
When I run, I receive the error messages:
syntax error at test.plx line 3, near ") {"
syntax error at test.plx line 6, near "}"
I've run other programs similar to this without a hitch, so why this one is giving me problems I'm not sure. I've tried '-w', changing the '<=' sign to 'le', getting rid of spaces, and every other little thing I can think of, yet nothing changes the response or gives me another hint as to what's going on. So, if anyone can help, I would love an answer. Thanks! -B
Re: It LOOKS right...
by ikegami (Patriarch) on May 31, 2011 at 18:13 UTC
|
$count = 0
instead of
$count = 0;
because
$count = 0 if ($count <= 20) {
^
|
Error:
semi-colon,
postfix operator or
infix operator
expected
Next time, show the code you actually ran.
| [reply] [d/l] [select] |
|
Um, lol, where to begin....
Well, like I mentioned, I am pretty new. I am literally on page 36 of 'Learning Perl, 5th Edition'. And I did use -w in my code when trying out different things, yet I still received the same message as I showed in my original post. Read below, though.
As for the / before usr, I didn't mean to sound like I was completely dismissing the idea, but I knew it wasn't that because all of my other programs work without it. If there is a reason why it would be different for one program and not the others, please tell me.
Ikegami, sorry about the semicolon. I have a tendency to overview my posts, and I thought I had accidentally missed it. Turns out I did on the program, too. :P. But, this introduces a new problem. Hello world only prints once, but I want it to print 20 times and then the program to say "Wait...".
Ig, I am running Ubuntu 11.04 and when I want to run a program I type in 'perl name.plx'.
Also, thanks JavaFan and Ig for "defending" me, but the last thing I want to do is create hostilities between people.
| [reply] |
|
It wasn't just you they were defending, but rather a fundamental philosophy about how to treat newcomers to PerlMonks and newcomers to Perl.
Also, our job as more experienced monks is to model good diagnostic and problem solving skills. Suggesting that X is the problem when X has nothing to do with the problem is hardly good modelling.
Welcome to Perl and welcome to PerlMonks!
As for wanting it to print 20 times, you'll need a for-loop for that rather than a simple "if" statement. "if" statements evaluate a condition just once. For loops repeat until a particular condition is met. See For Loops.
| [reply] |
|
If there is a reason why it would be different for one program and not the others,
It's always wrong, but it doesn't give you trouble since you never use it.
but I want it to print 20 times and then the program to say "Wait...".
You need some kind of loop to do something repeatedly.
#!/usr/bin/perl
use strict;
use warnings;
print "Hello World!\n" for 1..20;
print "Wait, that's it?\n";
| [reply] [d/l] |
|
I type in 'perl name.plx'
In this case, it doesn't matter what path you put in the shebang/#!/first line, though the options still matter - perl will process them. You can (and probably should) read more in perlrun.
You may know that if you set execute permission on your script file you can run it with './name.plx' if it is in your current working directory or simply 'name.plx' if it is in one of the directories in your path. This can be convenient, but isn't necessary. If you want this to work, then you will have to have the path to your perl program in the first line, or use one of the "tricks" mentioned in perlrun.
I hope you start using "use strict" and "use warnings". You might have a look at perllexwarn to learn more about what they do and how to control them (sometimes you want to do things without the warnings or compilation errors).
If you want to print "Hello world" 20 times, use while instead of if, but TMTOWTDI. I might write your program something like this:
use strict;
use warnings;
print "Hello World!\n" for (1..20);
print "Wait, that's it?\n";
| [reply] [d/l] |
|
$ cat foo.err.log
syntax error at test.plx line 3, near ") {"
syntax error at test.plx line 6, near "}"
$ splain < foo.err.log
syntax error at test.plx line 3, near ") {" (#1)
(F) Probably means you had a syntax error. Common reasons include
+:
A keyword is misspelled.
A semicolon is missing.
A comma is missing.
An opening or closing parenthesis is missing.
An opening or closing brace is missing.
A closing quote is missing.
Often there will be another error message associated with the synt
+ax
error giving more information. (Sometimes it helps to turn on -w.
+)
The error message itself often tells you where it was in the line
+when
it decided to give up. Sometimes the actual error is several toke
+ns
before this, because Perl is good at understanding random input.
Occasionally the line number may be misleading, and once in a blue
+ moon
the only way to figure out what's triggering the error is to call
perl -c repeatedly, chopping away half the program each time to se
+e
if the error went away. Sort of the cybernetic version of S<20
questions>.
syntax error at test.plx line 6, near "}" (#1)
You've done good, you used code tags and paragraphs tags,
but like others have noted, the code you posted literally will not emit that error. Well, not when run by perl, any version starting with 4 or 5 ( 5.12.2) :D
For a question to be effective, the curtain (code) should match the drapes (error).
On a related note, instead of It LOOKS right... an effective title might have been syntax error at test.plx line 3, near ") {"
| [reply] [d/l] [select] |
|
Re: It LOOKS right...
by toolic (Bishop) on May 31, 2011 at 17:26 UTC
|
#! usr/bin/perl
Try adding a / before usr:
#!/usr/bin/perl
When I do that, it prints "Hello World!" for me.
See also: Shebang_(Unix) | [reply] [d/l] |
|
It's not the actual "Hello World" statement that I'm asking about. It's the error message I'm getting.
| [reply] |
|
| [reply] [d/l] [select] |
|
|
bash: ./test.pl: usr/bin/perl: bad interpreter: No such file or direct
+ory
If I run it as perl test.pl I get:
Hello World!
So, I wonder what system you are running it on and how you are running it. | [reply] [d/l] [select] |
A reply falls below the community's threshold of quality. You may see it by logging in. |
|
|