bnghtz

list_and_undef_in_return.pl

Apr 13th, 2015 (edited)
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 2.90 KB | None | 0 0
  1. #! /usr/bin/perl
  2.  
  3. ###############################################################################
  4. # Why you should not use return undef in every situation?
  5. # - In list context it became an array w/ one member, and it's true
  6. # - In scalar context it became UNDEF, and it's false
  7. # - If you are not sure, use the { return wantarray ? : ; }
  8. #                      or simple { return; }
  9. #
  10. # - The same goes with 0 and empty string
  11. ###############################################################################
  12.  
  13. use strict;
  14. use warnings;
  15. use Data::Dumper;
  16.  
  17. ###############################################################################
  18. my @a;
  19.  
  20. sub returnCheck_1() { return undef; }
  21. sub returnCheck_2() { return (); }
  22. sub returnCheck_3() { return wantarray ? () : undef; }
  23. sub returnCheck_4() { my @a; return @a; }
  24. sub returnCheck_5() {
  25.     my @a = qw(pqs local stocek kinai vcs izlelo hentes wikinger MAGIC w35 kurdisztan hoztam_magammal);
  26.     undef(@a);
  27.     return @a;
  28. }
  29. sub returnCheck_6() { return; }
  30.  
  31. #------------------------------------------------------------------------------
  32. warn "The   \@a = { undef; }   is an array with one member and \$a[0] == undef\n";
  33. @a = returnCheck_1();
  34. warn Data::Dumper::Dumper(\@a) . "\n";
  35. warn "\@a in boole enviroment becomes: " . (@a ? 'true' : 'false') . "\n\n";
  36.  
  37.  
  38. warn '-' x 80 . "\n";
  39. #------------------------------------------------------------------------------
  40. warn "The   \@a = { (); }   is an empty array\n";
  41. @a = returnCheck_2();
  42. warn Data::Dumper::Dumper(\@a) . "\n";
  43. warn "\@a in boole enviroment becomes: " . (@a ? 'true' : 'false') . "\n\n";
  44.  
  45.  
  46. warn '-' x 80 . "\n";
  47. #------------------------------------------------------------------------------
  48. warn "The   \@a = { wantarray ? () : undef; }    is an empty array or an undef\n";
  49. @a = returnCheck_3();
  50. warn Data::Dumper::Dumper(\@a) . "\n";
  51. warn "\@a in boole enviroment becomes: " . (@a ? 'true' : 'false') . "\n\n";
  52.  
  53.  
  54. warn '-' x 80 . "\n";
  55. #------------------------------------------------------------------------------
  56. warn "The   \@a = { my \@arr; return \@arr; }      is a NOT DEFINED array\n";
  57. @a = returnCheck_4();
  58. warn Data::Dumper::Dumper(\@a) . "\n";
  59. warn "\@a in boole enviroment becomes: " . (@a ? 'true' : 'false') . "\n\n";
  60.  
  61.  
  62. warn '-' x 80 . "\n";
  63. #------------------------------------------------------------------------------
  64. warn "The   \@a = { undef(\@arr); return \@arr; }  is an UNDEFINED array\n";
  65. @a = returnCheck_5();
  66. warn Data::Dumper::Dumper(\@a) . "\n";
  67. warn "\@a in boole enviroment becomes: " . (@a ? 'true' : 'false') . "\n\n";
  68.  
  69.  
  70. warn '-' x 80 . "\n";
  71. #------------------------------------------------------------------------------
  72. warn "The   \@a = { return; }                    is an UNDEFINED return value\n";
  73. @a = returnCheck_6();
  74. warn Data::Dumper::Dumper(\@a) . "\n";
  75. warn "\@a in boole enviroment becomes: " . (@a ? 'true' : 'false') . "\n\n";
  76. my @b;
Advertisement
Add Comment
Please, Sign In to add comment