in reply to Perl 6: Static/Dynamic Strong/Weak Type Systems

I thought Perl 5 was Strongly Typed. In what way is it Weakly Typed?
Considering only Perl's types at their highest level -- this means scalar, array, and hash -- then it is strongly typed. You cannot coerce one into the other. You can "convert" between types in some sense, as in %hash = @arr, or @arr = $scalar. But you can never use hash-specific operations on an array, or vice-versa.

On the other hand, if you consider the different kinds of scalar datatypes -- boolean, string, int, float, reference -- it is weakly typed. These types of values can all be freely coerced into each other, with the exception of coercing into a reference. You can freely perform int-specific or string-specific operations on any scalar variable.

blokhead

  • Comment on Re: Perl 6: Static/Dynamic Strong/Weak Type Systems

Replies are listed 'Best First'.
Re^2: Perl 6: Static/Dynamic Strong/Weak Type Systems
by Anonymous Monk on Apr 17, 2006 at 18:23 UTC
    But you can never use hash-specific operations on an array, or vice-versa.

    *shrug* Some things are legal, some are not: it depends on whether the compiler autodetects the type, and issues a warning, or autodetects the type, and comes up with a conversion or a default value, or the function does something different when called with different data types.

    keys(@x) is illegal. But length(@x) is legal, if largely pointless, as is length(%x). delete($x10) is a very different operation, under the hood, than delete($x{10}), but both work fine.

    You can freely perform int-specific or string-specific operations on any scalar variable.

    There's an implict scalar representation for both arrays and hashes, so you can freely perform integer or string specific operations on arrays and hashes, too.

    $x = @x+15 is legal Perl. So is "$x = %x + 5" (althought it will issue warnings).

    --
    Ytrew