The value of a role’s required attribute is only checked on object creation. This article provides one way of enforcing it when applying the role to an object on the fly.
Sunday 17 December 2017
Saturday 28 October 2017
Perl course in London
On Saturday November 25, 2017 I'll be running a 2 hour Introduction to Perl for developers of other languages
http://act.yapc.eu/lpw2017/talk/7224
Please make sure you register so that I can set you up with a free 2 week enrolment at Geekuni.
Where?
http://act.yapc.eu/lpw2017/talk/7224
Please make sure you register so that I can set you up with a free 2 week enrolment at Geekuni.
Where?
Cavendish Campus, University of Westminster
115 New Cavendish Street London W1W 6UW
https://www.westminster.ac.uk/about-us/visit-us/directions/cavendish
115 New Cavendish Street London W1W 6UW
https://www.westminster.ac.uk/about-us/visit-us/directions/cavendish
Perl string concatenation and repetition
One of the first Perl operators to learn is the "dot" concatenation operator (.) for strings. For example:
my $string = 'foo' . 'bar'; # $string is 'foobar'.
On the other hand, if you have an array of strings @arr, then you can concatenate them by joining them with an empty string in-between:
my $string = join('', @arr);But what if you just want 10 "foo"s in a line? You might try the Python approach with 'foo' * 10 but Perl with its type conversion on the fly will try to convert 'foo' into a number and say something like:
Argument "foo" isn't numeric in multiplication (*) at...
Instead you should use the repetition operator (x) which takes a string on the left and a number on the right:
my $string = 'foo' x 10;and $string is then
foofoofoofoofoofoofoofoofoofooNote that even if you have integers on both sides, the 'x' repetition operator will cast the left operand into a string so that:
my $str = 20 x 10; # $str is "2020202020202020202020"
('x','y','z') x 10
evaluates as:
('x','y','z','x','y','z','x','y', ...)
But be warned: if the left operand is not enclosed in parentheses it is treated as a scalar.
my @arr = ('x', 'y', 'z'); my @bar = @arr x 10;
is equivalent to
my @bar = scalar(@arr) x 10; # @bar is an array of a single integer (3333333333)while, turning the array into a list of its elements by enclosing it in parentheses:
my @foo = ( (@arr) x 10 ); # then @foo is ('x','y','z','x','y','z','x','y', ...)
In summary, if you remember that 'x' is different to '*' and lists are treated differently to scalars, it's less likely your code will give you an unpleasant surprise!
Subscribe to:
Posts (Atom)