1
2
3
4
5
6
7
8
9
10
11
use v5.26;
use strict;
use warnings;
use utf8;
@* = (1, 2, 3);
say scalar @*;
my $array_ref = [];
say $array_ref-0;
say $array_ref-@*;
1
2
3
4
5
6
7
8
9
10
11
12
diff --git a/Kernel/TidyAll/Plugin/OTOBO/Perl/perlcriticrc b/Kernel/TidyAll/Plugin/OTOBO/Perl/perlcriticrc
index b254189..77994a7 100644
--- a/Kernel/TidyAll/Plugin/OTOBO/Perl/perlcriticrc
+++ b/Kernel/TidyAll/Plugin/OTOBO/Perl/perlcriticrc
@@ -78,6 +78,7 @@ modules = Class::ISA Pod::Plainer Shell Switch vars {Use 'our' variables instead
[Variables::ProhibitEvilVariables]
variables = $DB::single {clean up your debug statements}
+variables = @* {avoid the $ref-@* error}
[Subroutines::RequireFinalReturn]
terminal_methods = FatalError CustomerFatalError
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#! /usr/bin/env perl use strict; use warnings; use 5.024; my $array_ref = [ qw( a b c ) ]; say "Reftype: ", ref($array_ref); say "Stringified: ", "$array_ref"; say "Plain print: ", $array_ref; printf "0x%02x is %i\n", $array_ref, $array_ref; say "- 0 : ", $array_ref-0; # here, @* is an array @main::* ; see perldoc perlvar say "- \@* : ", $array_ref-@*; # here, @* is part of postfix deref; see perldoc perlref say "->\@* : ", $array_ref->@*; __END__
2023-11-10T11:44:08 rostiWie konkret stellst du das sicher?Mein WebFramework ist abwärtskompatibel zu v5.6.1 und wenn ich mich beim Perlcode irgendwo vertippe sehe ich das sofort im Browser.
1 2 3 4 5 6 7 8
print eval{ $self->data(); $self->header(); $self->start(); $self->menu(); $self->body(); $self->end(); } || "Content-Type: text/plain; Charset=UTF-8\nStatus: $HTTP_STATUS\n\n".$@;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ cat at_star.pl
use strict;
use warnings;
use Data::Dumper;
push @*, 'Servus beianand!';
print "Perl $]:\n"; # version of Perl
print Dumper(\@*);
bernhard@bernhard-Aspire-A515-57:~/devel/Perl$ perl at_star.pl
Perl 5.006001:
$VAR1 = [
'Servus beianand!'
];
QuotePerl variable names may also be a sequence of digits, a single
punctuation character, or the two-character sequence: "^" (caret or
CIRCUMFLEX ACCENT) followed by any one of the characters "[][A-Z^_?\]".
These names are all reserved for special uses by Perl; for example, the
all-digits names are used to hold data captured by backreferences after
a regular expression match.
Quoteund exit-Code 255 quittiert anstatt ein Array zu liefern wie das hier beschrieben wird.Array found where operator expected
2023-11-11T16:26:36 LinuxerEs steht seit 5.005_03 in der perldoc perlvar.
https://perldoc.perl.org/5.005_03/perlvar#Technica...
2023-11-11T09:05:48 rostiMit welcher Syntax machst du das?Jede Warnung wird zu einer Exception gemacht.
1 2 3 4 5 6 7 8 9 10 11 12
use strict; use warnings; use 5.024; # keine Fehler/Warnungen trotz strict+warnings say for @*; say for %*; # aber hier gibt's Fehler; haetten mit my, our, oder 'use vars' vorher deklariert werden muessen # aber ohne strict will man ja auch Aerger haben :-( say for @named_array; say for %hash_with_name;
1 2 3 4
@elements = @$array_ref; @elements = @{ $array_ref }; #oder eben @elements = $array_ref->@*;
1 2 3 4 5 6 7 8
# die geschweiften Klammern fuers Dereferenzieren koennen laestig erscheinen. # doof, wenn man am Ende feststellt, dass da ja ein Hash-Ref vorliegt; # dann muss man in der Zeile zurueckgehen und das @{ zu einem %{ machen ... @elements = @{$hashref->[0]->{keyname}->[23]->{kinder}}; # angenehmer: wenn mir am Ende bei ->{kinder} wieder einfällt, dass da ein Hash drinsteckt; # kann das @* vor Ort zu einem %* gemacht werden... (Diskussion moeglich; hier nicht relevant) @elements = $hashref->[0]->{keyname}->[23]->{kinder}->@*;
1 2 3 4 5 6
use warnings; ## WICHTIG!!!! my $hash_ref = { key => 'value' }; my %ergebnis = $hash_ref-%*; ## odd number of elements my %ergebnis = $hash_ref>%*; ## odd number of elements
perldoc perlvar...
Perl identifiers that begin with digits or punctuation characters are exempt from the effects of the package declaration and are always forced to be in package main; they are also exempt from strict 'vars' errors. ...
1 2 3 4 5 6 7 8 9
use base "Factory"; use strict; use warnings; my $m = main->new; my $code = $m->can('foo'); my $amt = $m-$code; sub foo{1}