Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

syntax error at labmonkey.pl line 1, at EOF

by theredqueentheory (Initiate)
on Mar 04, 2008 at 18:14 UTC ( [id://671963]=perlquestion: print w/replies, xml ) Need Help??

theredqueentheory has asked for the wisdom of the Perl Monks concerning the following question:

Please assist, I'm a biotech grad student trying to learn perl to make my experimental data easier to manipulate. I am writing a very simple program for conversions to start with, but am getting errors: Any help is greatly appreciated!
my ($value, $from, $to, $prefix, %allprefixes); %allprefixes = ( "mega" => 6, #use these as exponents, so down below I can just + subtract exponents to get the answer "kilo" => 3, "milli" => -3, "micro" => -6, "nano" => -9, "pico" => -12, "femto" => -15, "atto" => -18, "zepto" => -21, "yocto" => -24, ); print "Enter the unit that you are starting with: "; $from = <STDIN>; print "Enter your target unit: "; $to = <STDIN>; print "Enter the numerical amount: "; $value = <STDIN>; chomp ($from); chomp ($to); chomp ($value); if (not exists $allprefixes{$to}) { die "My programmer has not yet supplied me with $to as a prefix\n" +; } if (not exists $allprefixes{$from}) { die "My programmer has not yet supplied me with $from as a prefix\ +n"; } $prefix = $allprefixes{$to} -- $allprefixes{$from}; print "$value $from is ",$value*$prefix," $to. \n";

Replies are listed 'Best First'.
Re: syntax error at labmonkey.pl line 1, at EOF
by DigitalKitty (Parson) on Mar 04, 2008 at 18:43 UTC
    Hi redqueentheory.

    Welcome to PM.

    Perhaps a minor point but I'd rewrite your code as:
    use warnings; use strict; my $value = 0; my $from = ''; my $to = ''; my $prefix = ''; my %prefixes = (); %prefixes = ( mega => 6, kilo => 3, milli => -3, micro => -6, nano => -9, pico => -12, femto => -15, atto => -18, zepto => -21, yocto => -24, ); print "Enter the unit that you are starting with: "; chomp( $from = <STDIN> ); print "Enter your target unit: "; chomp( $to = <STDIN> ); print "Enter the numerical amount: "; chomp( $value = <STDIN> ); if ( not exists $prefixes{$from} ) { die qq/I don't know about the prefix $from\n/; } if ( not exists $prefixes{$to} ) { die qq/I don't know about the prefix $to\n/; } $prefix = $prefixes{$from} - $prefixes{$to}; print "$value $from is ", $value * (10**$prefix), " $to. \n"; #Output: C:\perl pm_test.pl Enter the unit that you are starting with: mega Enter your target unit: kilo Enter the numerical amount: 10 10 mega is 10000 kilo.

    Hope this helps,
    ~Katie
Re: syntax error at labmonkey.pl line 1, at EOF
by apl (Monsignor) on Mar 04, 2008 at 18:28 UTC
    You need to fix $prefix = $allprefixes{$to} -- $allprefixes{$from}; A double negative sign is not valid in this statement.

    I think you want a single minus sign for the exponent arithmetic. The final print needs some work as what it displays is misleading.

    (You also need something like #!/usr/local/bin/perl as your first line.)

      Cool. I have downloaded the TextMate text editor and now it runs, must have been an AdobeGoLive problem. I have searched for the OS units program, but don't seem to have it installed. Could you kindly provide a link? I have searched online but have not found a place to download it.

        Eeww. Consider getting a real code editor (or learn a *NIX standard such as vim or emacs). XCode's builtin editor also would be a step up (presuming you have the OS X development tools installed).

        And as a comment to your original program, you might consider using the OS' units program which already has a fairly good knowledge of conversions rather than reinventing the wheel piecemeal yourself.

        $ units kilograms grams * 1000 / 0.001 $ units feet kilometers * 0.0003048 / 3280.8399

        (Those two lines are what you multiply the later by to get the former and what you divide the former by to get the later)

        Update: Duuur. Strike that, reverse it; as is noted below. Been so long since I've used it I forgot how it works. (At least I remembered it was there . . . :)

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

        I can run your script once I've added #!/usr/local/bin/perl as the first line (because I'm using Solaris).

        What exactly is the error you're getting?

Re: syntax error at labmonkey.pl line 1, at EOF
by Old_Gray_Bear (Bishop) on Mar 04, 2008 at 18:42 UTC
    I got
    perl -c "labmonkey.pl" Scalar found where operator expected at labmonkey.pl line 34, near "-- $allprefixes" (Missing operator before $allprefixes?) syntax error at labmonkey.pl line 34, near "-- $allprefixes" labmonkey.pl had compilation errors.
    When I ran your code.

    I noticed that you didn't start the code with a 'shebang' line. May I suggest adding these lines to the top of your code:

    #! /usr/local/bin/perl use strict; use warnings;
    The shebang lets your OS get a clue about what language to expect; strict and warnings will give you a heads up about common mistakes and errors. ('variable used once, possible typo?' is one of my favorites -- I am a three fingered typist, all three fingers are on my left hand. I see that one a lot.)

    Welcome to the Monastery, have fun with the Toys, don't forget to enjoy yourself.

    ----
    I Go Back to Sleep, Now.

    OGB

Re: syntax error at labmonkey.pl line 1, at EOF
by ikegami (Patriarch) on Mar 04, 2008 at 18:47 UTC

    That error doesn't sound like something Perl would give. Is that the error message exactly? Are you sure perl is being used?

    And line 1 isn't near EOF. Are the line endings correct? Again, Perl shouldn't care about that.

Re: syntax error at labmonkey.pl line 1, at EOF
by graff (Chancellor) on Mar 05, 2008 at 03:32 UTC
    I hope the previous replies have brought you to a point where you have a functioning and satisfying script. Now, I'd like to introduce you to my best friend... @ARGV, meet theredqueentheory. Red, meet @ARGV:
    #!/usr/bin/perl # (of course, "/usr/local/bin/perl" should work as well) use strict; if ( @ARGV != 3 ) { die "Usage: $0 starting_unit target_unit numeric_amount\n"; } my ( $from, $to, $value ) = @ARGV; #use these as exponents; below we just subtract exponents to get the a +nswer my %prefixes = ( "mega" => 6, "kilo" => 3, "milli" => -3, "micro" => -6, "nano" => -9, "pico" => -12, "femto" => -15, "atto" => -18, "zepto" => -21, "yocto" => -24, ); for ( $from, $to ) { next if ( exists( $prefixes{$_} )); my $msg = "$_ is not a known unit. Try one of these:\n"; for my $prf (sort { $prefixes{$b}<=>$prefixes{$a} } keys %prefixes + ) { $msg .= "\t$prf\n"; } die $msg; } my $exp = $prefixes{$from} - $prefixes{$to}; print "$value $from is ", $value * 10 ** $exp, " $to.\n";
    I think that produces the sort of result you were looking for (I adopted the mathematical corrections provided by DigitalKitty).

    The virtues and bonuses of using @ARGV to get user input from args on the command line are numerous, and you will appreciate them more and more as time goes by.

    Simple example: does your shell support "command history", where you are able to use the "up-arrow" key to get back to a previous command, edit it and run again? (All decent shells have this.) Consider wanting to run your script 5 times with different user inputs... what is easier: answering the same three questions repeatedly 5 times? or recalling a previous command, changing one or more args on the command line, and running it again? Try it both ways, and see which one you like better.

Re: syntax error at labmonkey.pl line 1, at EOF
by Zen (Deacon) on Mar 04, 2008 at 23:31 UTC
    Learning perl is well worth the time investment. Nothing beats it for easy reporting and analytics, IMHO.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others taking refuge in the Monastery: (3)
As of 2024-04-19 22:26 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found