Interesting Error - Can't use string ("1909") as an ARRAY ref while "strict refs" in use

Julian Field MailScanner at ecs.soton.ac.uk
Mon Mar 9 19:13:10 GMT 2009


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1



On 9/3/09 13:52, Rick Cooper wrote:
>
>
>   >  -----Original Message-----
>   >  From: mailscanner-bounces at lists.mailscanner.info
>   >  [mailto:mailscanner-bounces at lists.mailscanner.info] On
>   >  Behalf Of Julian Field
>   >  Sent: Sunday, March 08, 2009 11:35 AM
>   >  To: MailScanner discussion
>   >  Subject: Re: Interesting Error - Can't use string ("1909")
>   >  as an ARRAY ref while "strict refs" in use
>   >
>   >
>   >
>   >  On 3/8/09 3:25 PM, Drew Marshall wrote:
>   >  >  ----- "Julian Field"<MailScanner at ecs.soton.ac.uk>   wrote:
>   >  >
>   >  >
>   >  >>  Okay, try changing your line 509 to say this instead:
>   >  >>  while(${@{$body}}[$#{@$body}] !~ /^\s*$/) {
>   >  >>  That does at least compile ( sorry about that :-(
>   >  >>
>   >  >  No worries. You are right it does compile but..
>   >  >
>   >  >  MailScanner --debug
>   >  >  In Debugging mode, not forking...
>   >  >  Trying to setlogsock(unix)
>   >  >  Building a message batch to scan...
>   >  >  Have a batch of 5 messages.
>   >  >  max message size is '250000 trackback'
>   >  >  Can't use string ("76") as an ARRAY ref while "strict
>   >  refs" in use at
>   >  /usr/share/MailScanner//MailScanner/PFDiskStore.pm line 509.
>   >  >
>   >  How about this then? (He says, desperately trying to work
>   >  around a nast
>   >  bug in Perl 5.10)
>   >
>   >  my $bodysize = $#{@$body}+0;
>   >  while (${@{$body}}[$bodysize+0] !~ /^\s*@/) {
>   >
>   >  If that doesn't work either, I give up.
>   >
>   >  Jules
>   >
>   And if that doesn't work wouldn't this do the same thing?
>
> my @bodycheck = @{$body};
>    
This will involve making a copy of the entire message in memory. *Very* 
expensive thing to do, need to avoid this at all costs.
> for ($i=(@bodycheck-1);$i>= 0; $i--){
> 	last if @bodycheck[$i] =~ /^\s*$/;
>    
you don't really mean @bodycheck[$i] do you? Surely you mean $bodycheck[$i]?
> 	print "Line is ****". at bodycheck[$i]."****\n";
> 	pop @{$body};
> }
>    
So yes, it would do the same thing, but it will take a hell of a lot 
longer to do, and will use a lot more memory too.
> Rick
>
>
>
> --
> This message has been scanned for viruses and
> dangerous content by MailScanner, and is
> believed to be clean.
>
>
>    

Jules

- -- 
Julian Field MEng CITP CEng
www.MailScanner.info
Buy the MailScanner book at www.MailScanner.info/store

MailScanner customisation, or any advanced system administration help?
Contact me at Jules at Jules.FM

PGP footprint: EE81 D763 3DB0 0BFD E1DC 7222 11F6 5947 1415 B654
PGP public key: http://www.jules.fm/julesfm.asc


-----BEGIN PGP SIGNATURE-----
Version: PGP Desktop 9.9.1 (Build 287)
Comment: Use PGP or Thunderbird Enigmail to verify this message
Charset: ISO-8859-1

wj8DBQFJtWpHEfZZRxQVtlQRAphbAJsE+NmZtDwIe9XtsprXaJut14PH1QCfaaW5
FwDnqgiZjBmw4CXBhPEZkNI=
=1Xgy
-----END PGP SIGNATURE-----

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.



More information about the MailScanner mailing list