Can't use string as a subroutine ref while "strict refs"

Hello,

	I am trying to do the following, do I need to remove the strict option for this to work or is there a better way ?

--snip--
sub admin {

     my $term = shift;
     my $host = shift;

     my @actions = ( "ssh_login", "su_login", "su_logout", "ssh_logout", "cmds" );

     foreach my $a (@actions) {

	&show_log("Calling $a");
	my $check= &{$a};

	return(1) unless $check==0;
     }

}
--snip--

-- 
Michael Gale

Red Hat Certified Engineer
Network Administrator
Pason Systems Corp.
0
michael
2/28/2007 10:03:41 PM
perl.beginners 29388 articles. 4 followers. Follow

2 Replies
1683 Views

Similar Articles

[PageSpeed] 46

You could turn of strict refs for just that function if you want.

sub admin {
   no strict 'refs';
   ....
}

Otherwise you could put valid function names in a hash and call it
based on that.  Something like

my @fun = (ssh_login => \&ssh_login, su_login => \&su_login ....);
....
$fun->{$a}->();

-Jason

On 2/28/07, Michael Gale <michael.gale@pason.com> wrote:
> Hello,
>
>         I am trying to do the following, do I need to remove the strict option for this to work or is there a better way ?
>
> --snip--
> sub admin {
>
>      my $term = shift;
>      my $host = shift;
>
>      my @actions = ( "ssh_login", "su_login", "su_logout", "ssh_logout", "cmds" );
>
>      foreach my $a (@actions) {
>
>         &show_log("Calling $a");
>         my $check= &{$a};
>
>         return(1) unless $check==0;
>      }
>
> }
> --snip--
>
> --
> Michael Gale
>
> Red Hat Certified Engineer
> Network Administrator
> Pason Systems Corp.
>
> --
> To unsubscribe, e-mail: beginners-unsubscribe@perl.org
> For additional commands, e-mail: beginners-help@perl.org
> http://learn.perl.org/
>
>
>
0
jroth2
2/28/2007 10:16:55 PM
On 2/28/07, Michael Gale <michael.gale@pason.com> wrote:

>         I am trying to do the following, do I need to remove the strict option for
> this to work or is there a better way ?

There is a better way.

>      my @actions = ( "ssh_login", "su_login", "su_logout", "ssh_logout", "cmds" );
>
>      foreach my $a (@actions) {
>
>         &show_log("Calling $a");
>         my $check= &{$a};

Under "strict refs", this fails. One reason is that this code could,
potentially, call *any* subroutine available, and that's hard on
maintainability and security.

The goal, then, is to find a better way to start with a string and end
up with a subroutine call. Using a soft reference (i.e., a string) to
do it is forbidden by 'strict'. But a normal reference is fine.

  my %action_table = (
    ssh_login => \&ssh_login,
    su_login => \&su_login,
    ... # all the rest
  );

Now that you have that table, you can call the subroutine safely like this:

  my $check = &{ $action_table{$a} }();

Or, using the arrow notation:

  my $check = $action_table{$a}->();

Either way, you can be sure that no *other* subroutine will ever be
called, no matter what strings somehow get into $a. Hope this helps!

--Tom Phoenix
Stonehenge Perl Training
0
tom
2/28/2007 10:19:20 PM
Reply:

Similar Artilces:

Can't use string ("1") as a HASH ref while "strict refs" in use at ./policy.sanitizer line 255.
Hi there, I am trying to figure out why the following lines are giving me an error: --- snip --- $found{filter}{$filter}{family}{$family} = 1; print keys %{ $found{filter}{$filter}{family} }; --- snip ---- here's the error Can't use string ("1") as a HASH ref while "strict refs" in use at ../policy.sanitizer line 255. I am trying to the display all the keys for $found{filter}{$filter}{family} please Cheers, Noah On 10/9/09 Fri Oct 9, 2009 2:12 PM, "Noah" <noah-list@enabled.com> sc...

Can't use string ("1") as a HASH ref while "strict refs"
--00151747694010009a04ad544f1b Content-Type: text/plain; charset=UTF-8 Hi, I was getting this error message for one of my script. The reason came out out to be, I had not place a semi-colon at the end of try-catch block. try { something } catch some_exception { do something } After I placed the semi-colon, I am no longer getting this error (Can't use string ("1") as a HASH ref while "strict refs") try { something } catch some_exception { do something }; My questions is I have quite a few scripts that are using the SAME try-catch...

Can't use string ("3862926") as a HASH ref while "strict refs"
I guess I'm not understanding what I'm doing (or have been reading in my web searches)... Can someone explain the difference between these two code snippets... SUN83-PRODWEB>more foo #! /usr/local/bin/perl use strict; my %t; my ($a, $c); my ($aa, $cc); $a=3D$aa=3D1; $c=3D$cc=3Dq{Additional Electrical Circuit}; $t{$a}{$c}{AMT}=3D1000; $c=3Dq{Additional}; $t{$a}{$c}{AMT}=3D2; print $t{$aa}{$cc}{AMT}, "\n"; &Ix($t{$aa}{$cc}{AMT}); sub Ix { my ($v) =3D @_; ...

bugzilla: undef error
I'm encountering the problem described here: https://bugzilla.mozilla.org/show_bug.cgi?id=300448 I'm running bugzilla 2.18.3 on fedora. The problem seems to be that a line was added to this file: template/en/default/bug/create/created.html.tmpl So I commented out this line: mailrecipients = item.mailrecipients and restarted everything, but I'm still getting the same error. I'm not sure that I understand the solution very well. Any ideas? Thanks, Bryan ...

DBD::Proxy::db table_info failed: Server returned error: Failed to execute method CallMethod: Can't use string ("1") as an ARRAY ref while "strict refs" in use
------_=_NextPart_001_01C2BB46.4379CEA8 Content-Type: multipart/related; type="multipart/alternative"; boundary="----_=_NextPart_002_01C2BB46.4379CEA8" ------_=_NextPart_002_01C2BB46.4379CEA8 Content-Type: multipart/alternative; boundary="----_=_NextPart_003_01C2BB46.4379CEA8" ------_=_NextPart_003_01C2BB46.4379CEA8 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable I'm having a problem using the table_info() via ProxyServer... I'm = getting the following error messages: I am us...

lwp-rget error message ("can't use string ("URI::URL") as ARRAY ref)
I've been using lwp-rget, for instance: cyc$ lwp-rget --depth=2 --limit=100 "http://www.somesite.com/~whoever with no problems. tonight I got this msg: Can't use string ("URI::URL") as an ARRAY ref while "strict refs" in use at /usr/local/path_to_module/URI/WithBase.pm line 41. version info: This is perl, version 5.005_03 built for i386-freebsd and: This is lwp-rget version 1.19 (libwww-perl-5.52) Any advice would be really appreciated. CYC. Hi! I have a simple program which opens each URL in a file and saves ...

Can't use string ("") as an Array ref
I'm getting the following when trying running the following code with use strict; without it, it works fine.=20 =23=21/usr/bin/perl -w=20 use strict;=20 use warnings;=20 use Data::Dumper;=20 my (=40data,=40contents);=20 =40data =3D <STDIN>; push(=40contents,map =7B =5B split/:/,=24_ =5D if/=5E=5Cw+/ =7D (sort = =40data) );=20 for(1..=24=23contents) =7B=20 print =24contents=5B=24_->=5B0=5D . =22=5Cn=22 if = defined(=24contents=5B=24_=5D->=5B0=5D);=20 =7D - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - = - - - - - - - Th...

Can't use string ("bug/create/create-guided.html.tm") as a HASH ref
- I could use some help with my Bugzilla install - I have installed the stable release of Bugzilla (2.16.5) and have customized some of the templates (which is a cool new way to do things). I am following the instructions to modify create.html.tmpl and comment.txt.tmpl to create some fields for bug entry. However, I get the following perl error message and I can't figure out why: Can't use string ("bug/create/create-guided.html.tm") as a HASH ref while "strict refs" in use at /usr/lib/perl5/site_perl/5.8.0/Template/Provider.pm line 663. I am new to...

(setxkbmap) can't use "ALT_GR"/"left ALT" button after using it
hello folks i use LXDE as i'm known and my only solution to switch keyboard is to use setxkbmap now after i define keyboards layouts to switch and chose ALT+Shift to switch it goes "bugged" using the right ALT will switch the layouts and i'm not able to write the "other" letters help please P.S : this is the command i use �setxkbmap -option grp:switch,grp:alt_shift_toggle,grp_led:scroll fr,ar� -- SAFAD ------------------------------------------------------------------------ bump up rotfl! -- SAFAD -------------------------------...

"xmlns" ref can't be found
I had everything working great then I had an ASP.NET problem and re-installed .netFramwork and ASP.NETnow I get the following message when I go to run my portalParser Error Message: Unrecognized attribute 'xmlns'.Source Error: Line 1: <?xml version="1.0" encoding="utf-8"?> Line 2: <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> Line 3: </configuration> Source File: c:\inetpub\wwwroot\web.config    Line: 2 What Happened and why am I getting this message ??????????????????? Make sure that the IIS virtual directory  is...

why can't i use the attribute "onchange" or "onfocus" in checkbox
when i use the code like this:myCheckBox.Attributes["onfocus"]="this.blur()" it doesn't work,just generate the tag "span" containing the javascriptMSN:supNate2000@hotmail.com You should be using RegisterStartupScript or RegisterClientScript. See this article by Scott Mitchell: Injecting Client-Side Script from an ASP.NET Server Control http://msdn.microsoft.com/asp.net/using/understanding/aspnet/default.aspx?pull=/library/en-us/dnaspp/html/aspnet-injectclientsidesc.aspDarrell Norton, MVPDarrell Norton's BlogPlease mark this post as answered if it...

Can't we use "Usercontrol" in an "asp:view" control in asp.net
 HiIn my application i have used multiview and view controls i have implemented some user controlsnow i don't want to write the whole code in view control instead i want to use the usercontrolcan we place the usercontrol in view controlhow can we do thati have registered the usercontrol but when I'm trying to place in view control its not showing the tagprefixdoes anyone know this how to dothanks in advanceArchu   archu136:  Hi In my application i have used multiview and view controls i have implemented some user controls now i don't want to writ...

Using "Address Selector" in "Find by Example"
Hi When doing a find by example and using the address selector to double click a resopurce address to select it 80% of the time it enters the first entry in the address book rather than the address selected. For user addresses it works fine though. Is there a way to use the address selectro in a find by example? Or do you have to type the address for resources? Thanks Rampaola, It appears that in the past few days you have not received a response to your posting. That concerns us, and has triggered this automated reply. Has your problem been resolved? If not, you ...

Web resources about - Can't use string as a subroutine ref while "strict refs" - perl.beginners

Resources last updated: 12/22/2015 7:46:55 PM