Guest User

Untitled

a guest
Aug 10th, 2018
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.51 KB | None | 0 0
  1. Perl difficulty passing values to function
  2. package This_package;
  3. .......
  4.  
  5. # returned from function that parses post data ($reqparam)
  6. my $thisuser = $$reqparam{"username"};
  7.  
  8. # escape '@', username is an email
  9. $thisuser =~ s/@/@/;
  10. my $thisuser_pass = $$reqparam{'password'};
  11.  
  12. print $thisuser; # ok
  13. print $thisuser_pass; # ok
  14.  
  15. my $obj = new users;
  16. my $valid_user = $obj->login($thisuser, $thisuser_pass);
  17. .......
  18.  
  19. package Another_package;
  20. sub new {
  21. my ($class) = @_;
  22. my $self = {
  23. _login => undef,
  24. _create_user => undef,
  25. ....
  26. };
  27. bless $self, $class;
  28. return $self;
  29. }
  30.  
  31. sub login ($$){
  32. my ($user, $pass) = @_;
  33. # some processing
  34. .....
  35.  
  36. return $user; # prints users=HASH(...)
  37. # return $pass; # prints the value of $user (the actual value)
  38. # instead of the value of $pass
  39. }
  40.  
  41. my $valid_user = $obj->login($thisuser, $thisuser_pass);
  42.  
  43. sub login
  44. {
  45. my ( $self , $user , $password ) = @_;
  46. }
  47.  
  48. $self->callAnotherObject( $user );
  49.  
  50. callAnotherObject( $user );
  51.  
  52. sub login {
  53. my ($self, $user, $pass) = @_;
  54. ...
  55. }
  56.  
  57. my $package_obj = Another_package->new;
  58. $package_obj->login($user, $password);
  59.  
  60. package Another_package;
  61.  
  62. sub new {
  63. ...
  64. }
  65.  
  66. sub foo {
  67. ...
  68. my $user = login ($user, $password);
  69. }
  70.  
  71. sub login {
  72. my $self = shift; #Pointer to the Another_package object I'm using
  73. my $user = shift;
  74. my $password = shift; #I just love lining things up!
  75.  
  76. $self->{USER} = $user; #Bad way of doing it.
  77. $self->{PASSWD} = $password;
  78. ... #Some processing.
  79.  
  80. return $user;
  81. }
  82.  
  83. sub Login { #In standard Perl, methods are capitalized.
  84. my $self = shift; #Pointer to Another_package object
  85. my $user = shift; #Allow user to pass user and password in constructor
  86. my $password = shift; #I just love lining things up!
  87.  
  88. $self->User($user); #Way better: This is a setter/getter method
  89. $self->Password($password);
  90. ... #Some processing.
  91.  
  92. return $user;
  93. }
  94.  
  95. package Another_package;
  96.  
  97. sub new {
  98. my $class = shift;
  99. my $user = shift;
  100. my $password = shift;
  101.  
  102. my $self = {};
  103. bless $self, $class;
  104.  
  105. $self->User($user);
  106. $self->Password($password);
  107. ...
  108. return $self;
  109. }
  110.  
  111. sub Login {
  112. my $self = shift;
  113. my $user = shift;
  114. my $pass = shift;
  115.  
  116. $self->Password($pass);
  117. if (not defined $self->User($user)) {
  118. croak qq(Cannot log in without a user ID);
  119. }
  120.  
  121. ...
  122. if ($login_successful) {
  123. return $self->User; #Or maybe a session instant
  124. else {
  125. return;
  126. }
  127. }
  128.  
  129. my $package_obj = Another_package->new($user, $password);
  130.  
  131. my $foo = $package_obj->Login;
  132. if (not defined $foo) {
  133. foreach my $password qw(swordfish s3x mon3y 7ucky) {
  134. $package_obj->Password($password);
  135. last if $foo = $package_obj->Login;
  136. }
  137. if (not defined $foo) {
  138. die "I don't know the password :-(";
  139. }
  140. }
  141.  
  142. sub User {
  143. my $self = shift;
  144. my $user = shift;
  145.  
  146. if(defined $user) {
  147. $self->{USER_INFO}->{USER} = $user;
  148. }
  149. return $self->{USER_INFO}->{USER};
  150. }
  151.  
  152. sub Password {
  153. my $self = shift;
  154. my $pass = shift;
  155. if (defined $password) {
  156. $self->{USER_INFO}->{PASSWORD} = $pass;
  157. }
  158. return $self->{USER_INFO}->{PASSWORD};
  159. }
Add Comment
Please, Sign In to add comment