in reply to Re^2: Merge 2 lines in 1 die statement
in thread Die statement with text & formatting of the user

In this snippet exit doesnt end the perl cgi script as i expect it to do but instead it exits the if structure.

There's no such thing as exiting an if structure with exit. You can exit a loop with last, but exit exits the program.

if(1) { print "1 seems to be true\n"; exit 0; } print "After exit..\n"; __END__ 1 seems to be true

The After exit. is not printed.

Wouldnt it be better to just somethign like this work?

No, because die throws its message out STDERR, which is not what you want. Read the docs.

--shmem

_($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                              /\_¯/(q    /
----------------------------  \__(m.====·.(_("always off the crowd"))."·
");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}

Replies are listed 'Best First'.
Re^4: Merge 2 lines in 1 die statement
by Nik (Initiate) on Apr 28, 2007 at 09:39 UTC
    print(h1( {class=>'cyan'}, "Error occured $row->{username}! Script hav +e to die" )), exit(0) if $select->rows;
    Here? why the program exits without printing first?

      That's because you are passing a list to print. For this list to be printed, its elements must be evaluated first. There's a exit call in that list, so that is done, and the print never gets executed. Consider
      print "no rows\n", exit unless $rows; print "we seem to have rows.\n"; __END__

      and

      print "no rows\n" and exit unless $rows; print "we seem to have rows.\n"; __END__ no rows

      update: as ikegami point out below, you are not passing a list to print - since you treat print as a function, and are passing in its arguments in parens. With the comma operator, you are still evalutaing a list, and in that list exit gets evaluated..

      --shmem

      _($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                                    /\_¯/(q    /
      ----------------------------  \__(m.====·.(_("always off the crowd"))."·
      ");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}

        That's because you are passing a list to print.

        Unless he edited the code he posted, that's not true. His code has parens.

        print("no rows\n"), exit unless $rows; print "we seem to have rows.\n"; __END__ no rows
        Thank you now its clear to me!!
        Exit was evaluated but evaluation meant execution and the script dies prematurely witohut completely printed...

        Can you aslo answer on die statement i kses in same thread that both prints my error and displays its error too?