Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

It LOOKS right...

by BIOM01 (Initiate)
on May 31, 2011 at 17:22 UTC ( #907506=perlquestion: print w/ replies, xml ) Need Help??
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

Comment on It LOOKS right...
Select or Download Code
Re: It LOOKS right...
by toolic (Chancellor) 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)

      It's not the actual "Hello World" statement that I'm asking about. It's the error message I'm getting.

        If the #! line isn't correct then your code will be passed to /bin/sh, not Perl, and that's what produced the error messages.

        The cake is a lie.
        The cake is a lie.
        The cake is a lie.

        When I run your program, pasted to a file test.pl, as ./test.pl on my system (Debian Linux) I get:

        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.

Re: It LOOKS right...
by TomDLux (Vicar) on May 31, 2011 at 17:44 UTC

    If I use chmod to make the program executable, and try to run it by invoking the file name in the Unix shell, I get a shell error "cannot execute", probably due to the missing backslash in line 1.

    If I invoke Perl and specify the file as an argument, it runs fine.

    ---outvoted---

    As Occam said: Entia non sunt multiplicanda praeter necessitatem.

      I don't think someone who is very new to Perl should be ashamed of themselves for asking for help or for anything they don't know about it, including any of its features and pitfalls, let alone anything as obscure as use strict and use warnings. They are hardly intuitively obvious, perl doesn't deem them worthy of mention until the very end of the page, and one has to read perlsyn quite thoroughly before finding use warnings suggested.

      Nor do I think that failure to use them has anything to do with the problem at hand. But, to be sure, I tried adding them to the program in the original post and running it to see if it provided any clarification of what might be the cause of the problem. They didn't help.

      None the less, I think use strict and use warnings are valuable features, especially for beginners. A more gentle introduction is in The strictures, according to Seuss, which I recommend.

      If anyone should be ashamed, it is those of us with enough experience to know how commonly beginners are unaware of the goodness of Perl and how to use it well, yet lambaste them when they ask for help rather than encouraging them in their studies and their seeking of wisdom.

      All the same, you should be ashamed of yourself for asking, "why doesn't my program work" when you aren't using warnings and strict.
      But that isn't his question.

      His question is, "why doesn't my program compile".

      No amount of enabling strictness or warnings is going to help you with that. In fact, enabling strictness increases the likelihood your program doesn't compile.

      IMO, your attitude is less than useful. There's absolutely no point of saying "you didn't do X" when whether one does or does not do X matter for the problem being asked.

      If you can't be bothered to use the tools you have right there in Perl to detect problems, why should we resolve them for you?
      Right, if all you have is a nail, everything looks like a hammer. Unfortunally, there's no nail in this case, making the hammer useless. Please get rid of the idiotic idea that use strict or use warnings are magic bullets. They are not, and your post proves that once again.
Re: It LOOKS right...
by ikegami (Pope) on May 31, 2011 at 18:13 UTC

    You would get that error if you had

    $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.

      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.

        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.

        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";
        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";
        Um, lol, where to begin....

        Great attitude :D

        Here is something you should see, splain/diagnostics (eventually , you'll want to read Use strict warnings and diagnostics or die aka Read this if you want to cut your development time in half!)

        $ 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 ") {"

Reaped: Re: It LOOKS right...
by NodeReaper (Curate) on May 31, 2011 at 18:14 UTC

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://907506]
Approved by toolic
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (5)
As of 2014-12-29 08:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (185 votes), past polls