home.social

#perl — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #perl, aggregated by home.social.

  1. I just discovered this great series of articles on the beauty of and its features: dev.to/damil/beautiful-perl-fe

  2. @inglfo For a moment I thought you'd have found #perl running on one of those on-board entertainment systems that someone had inexplicably set up with OpenBSD 😅

  3. @inglfo For a moment I thought you'd have found #perl running on one of those on-board entertainment systems that someone had inexplicably set up with OpenBSD 😅

  4. @inglfo For a moment I thought you'd have found #perl running on one of those on-board entertainment systems that someone had inexplicably set up with OpenBSD 😅

  5. @inglfo For a moment I thought you'd have found #perl running on one of those on-board entertainment systems that someone had inexplicably set up with OpenBSD 😅

  6. @PerlWChallenge 373 Equal List and List Division wlmb.github.io/2026/05/11/PWC3

  7. CW: Perl Weekly Challenge 373T2

    @PerlWChallenge 373 Task 2: List Division

    ```
    perl -E '
    for my($l,$n)(@ARGV){$s=(@L=split" ",$l)/$n; $r=@l%$n;say "$l, $n -> ",
    $n>@L?-1:map{"(".join(" ",splice(@L,0,$s+($_<=$r))).")"}(1..$n)}
    ' "1 2 3 4 5" 2 "1 2 3 4 5 6" 3 "1 2 3" 2 "1 2 3 4 5 6 7 8 9 10" 5 \
    "1 2 3" 4 "72 57 89 55 36 84 10 95 99 35" 7
    ```

  8. CW: Perl Weekly Challenge 373T2

    #Perl @PerlWChallenge 373 Task 2: List Division
    #noxp
    ```
    perl -E '
    for my($l,$n)(@ARGV){$s=(@L=split" ",$l)/$n; $r=@l%$n;say "$l, $n -> ",
    $n>@L?-1:map{"(".join(" ",splice(@L,0,$s+($_<=$r))).")"}(1..$n)}
    ' "1 2 3 4 5" 2 "1 2 3 4 5 6" 3 "1 2 3" 2 "1 2 3 4 5 6 7 8 9 10" 5 \
    "1 2 3" 4 "72 57 89 55 36 84 10 95 99 35" 7
    ```

  9. CW: Perl Weekly Challenge 373T2

    #Perl @PerlWChallenge 373 Task 2: List Division
    #noxp
    ```
    perl -E '
    for my($l,$n)(@ARGV){$s=(@L=split" ",$l)/$n; $r=@l%$n;say "$l, $n -> ",
    $n>@L?-1:map{"(".join(" ",splice(@L,0,$s+($_<=$r))).")"}(1..$n)}
    ' "1 2 3 4 5" 2 "1 2 3 4 5 6" 3 "1 2 3" 2 "1 2 3 4 5 6 7 8 9 10" 5 \
    "1 2 3" 4 "72 57 89 55 36 84 10 95 99 35" 7
    ```

  10. CW: Perl Weekly Challenge 373T2

    #Perl @PerlWChallenge 373 Task 2: List Division
    #noxp
    ```
    perl -E '
    for my($l,$n)(@ARGV){$s=(@L=split" ",$l)/$n; $r=@l%$n;say "$l, $n -> ",
    $n>@L?-1:map{"(".join(" ",splice(@L,0,$s+($_<=$r))).")"}(1..$n)}
    ' "1 2 3 4 5" 2 "1 2 3 4 5 6" 3 "1 2 3" 2 "1 2 3 4 5 6 7 8 9 10" 5 \
    "1 2 3" 4 "72 57 89 55 36 84 10 95 99 35" 7
    ```

  11. CW: Perl Weekly Challenge 373T2

    #Perl @PerlWChallenge 373 Task 2: List Division
    #noxp
    ```
    perl -E '
    for my($l,$n)(@ARGV){$s=(@L=split" ",$l)/$n; $r=@l%$n;say "$l, $n -> ",
    $n>@L?-1:map{"(".join(" ",splice(@L,0,$s+($_<=$r))).")"}(1..$n)}
    ' "1 2 3 4 5" 2 "1 2 3 4 5 6" 3 "1 2 3" 2 "1 2 3 4 5 6 7 8 9 10" 5 \
    "1 2 3" 4 "72 57 89 55 36 84 10 95 99 35" 7
    ```

  12. CW: Perl Weekly Challenge 373T1

    @PerlWChallenge 373 Task 1: Equal List

    ```
    perl -E '
    for my($x,$y)(@ARGV){say"$x; $y -> ",f($x)eq f($y)?"T":"F";}sub f($x){join"",split/\s*,\s*/,$x}
    ' "a, bc" "ab, c" "a, b, c" "a, bc" "a, bc" "a, c, b" "ab, c, " ", a, bc" "p, e, r, l" "perl"
    ```

  13. CW: Perl Weekly Challenge 373T1

    #Perl @PerlWChallenge 373 Task 1: Equal List
    #noxp
    ```
    perl -E '
    for my($x,$y)(@ARGV){say"$x; $y -> ",f($x)eq f($y)?"T":"F";}sub f($x){join"",split/\s*,\s*/,$x}
    ' "a, bc" "ab, c" "a, b, c" "a, bc" "a, bc" "a, c, b" "ab, c, " ", a, bc" "p, e, r, l" "perl"
    ```

  14. CW: Perl Weekly Challenge 373T1

    #Perl @PerlWChallenge 373 Task 1: Equal List
    #noxp
    ```
    perl -E '
    for my($x,$y)(@ARGV){say"$x; $y -> ",f($x)eq f($y)?"T":"F";}sub f($x){join"",split/\s*,\s*/,$x}
    ' "a, bc" "ab, c" "a, b, c" "a, bc" "a, bc" "a, c, b" "ab, c, " ", a, bc" "p, e, r, l" "perl"
    ```

  15. CW: Perl Weekly Challenge 373T1

    #Perl @PerlWChallenge 373 Task 1: Equal List
    #noxp
    ```
    perl -E '
    for my($x,$y)(@ARGV){say"$x; $y -> ",f($x)eq f($y)?"T":"F";}sub f($x){join"",split/\s*,\s*/,$x}
    ' "a, bc" "ab, c" "a, b, c" "a, bc" "a, bc" "a, c, b" "ab, c, " ", a, bc" "p, e, r, l" "perl"
    ```

  16. CW: Perl Weekly Challenge 373T1

    #Perl @PerlWChallenge 373 Task 1: Equal List
    #noxp
    ```
    perl -E '
    for my($x,$y)(@ARGV){say"$x; $y -> ",f($x)eq f($y)?"T":"F";}sub f($x){join"",split/\s*,\s*/,$x}
    ' "a, bc" "ab, c" "a, b, c" "a, bc" "a, bc" "a, c, b" "ab, c, " ", a, bc" "p, e, r, l" "perl"
    ```

  17. Perl Weekly Challenge 373's tasks are "Equal List" and "List Division". Because your kiss, your kiss is an equal list Because your kiss, your kiss divides my list Because your kiss is on my list of the best things in life #PerlWeeklyChallenge #raku #perl #python #elixir packy.dardan.com/b/pU

    Perl Weekly Challenge: Because...

  18. Perl Weekly Challenge 373's tasks are "Equal List" and "List Division". Because your kiss, your kiss is an equal list Because your kiss, your kiss divides my list Because your kiss is on my list of the best things in life #PerlWeeklyChallenge #raku #perl #python #elixir packy.dardan.com/b/pU

    Perl Weekly Challenge: Because...

  19. Perl Weekly Challenge 373's tasks are "Equal List" and "List Division". Because your kiss, your kiss is an equal list Because your kiss, your kiss divides my list Because your kiss is on my list of the best things in life #PerlWeeklyChallenge #raku #perl #python #elixir packy.dardan.com/b/pU

    Perl Weekly Challenge: Because...

  20. I've uploaded a prototype module for generating and parsing metadata about software #AI and automation policies, based on ideas from the #Perl Toolchain Summit in April.

    The idea is to have machine-readavle information about how code is generated, what kind of automated contributions are handled are allowed, and what kind of automation the maintainers of a project use.

    There's a draft spec at github.com/CPAN-Security/cpan- but it's already out-of-sync with the Perl code.

    Ideas and feedback would be appreciated.

    metacpan.org/release/RRWO/Dist

    #CPAN

  21. I've uploaded a prototype module for generating and parsing metadata about software #AI and automation policies, based on ideas from the #Perl Toolchain Summit in April.

    The idea is to have machine-readavle information about how code is generated, what kind of automated contributions are handled are allowed, and what kind of automation the maintainers of a project use.

    There's a draft spec at github.com/CPAN-Security/cpan- but it's already out-of-sync with the Perl code.

    Ideas and feedback would be appreciated.

    metacpan.org/release/RRWO/Dist

    #CPAN

  22. I've uploaded a prototype module for generating and parsing metadata about software #AI and automation policies, based on ideas from the #Perl Toolchain Summit in April.

    The idea is to have machine-readavle information about how code is generated, what kind of automated contributions are handled are allowed, and what kind of automation the maintainers of a project use.

    There's a draft spec at github.com/CPAN-Security/cpan- but it's already out-of-sync with the Perl code.

    Ideas and feedback would be appreciated.

    metacpan.org/release/RRWO/Dist

    #CPAN

  23. I've uploaded a prototype module for generating and parsing metadata about software #AI and automation policies, based on ideas from the #Perl Toolchain Summit in April.

    The idea is to have machine-readavle information about how code is generated, what kind of automated contributions are handled are allowed, and what kind of automation the maintainers of a project use.

    There's a draft spec at github.com/CPAN-Security/cpan- but it's already out-of-sync with the Perl code.

    Ideas and feedback would be appreciated.

    metacpan.org/release/RRWO/Dist

    #CPAN

  24. I've uploaded a prototype module for generating and parsing metadata about software #AI and automation policies, based on ideas from the #Perl Toolchain Summit in April.

    The idea is to have machine-readavle information about how code is generated, what kind of automated contributions are handled are allowed, and what kind of automation the maintainers of a project use.

    There's a draft spec at github.com/CPAN-Security/cpan- but it's already out-of-sync with the Perl code.

    Ideas and feedback would be appreciated.

    metacpan.org/release/RRWO/Dist

    #CPAN

  25. Boston PM Tech & Social on-line meeting tomorrow, Tues 7.30 EDT 🇺🇸 (=2330 GMT; soft start 7.00 pm for social and mic checks; JITSI not Zoom because FLOSS)

    mobilizon.us/events/fd8f4dab-1

    #Perl #Perl5

  26. Boston PM Tech & Social on-line meeting tomorrow, Tues 7.30 EDT 🇺🇸 (=2330 GMT; soft start 7.00 pm for social and mic checks; JITSI not Zoom because FLOSS)

    mobilizon.us/events/fd8f4dab-1

  27. Boston PM Tech & Social on-line meeting tomorrow, Tues 7.30 EDT 🇺🇸 (=2330 GMT; soft start 7.00 pm for social and mic checks; JITSI not Zoom because FLOSS)

    mobilizon.us/events/fd8f4dab-1

    #Perl #Perl5

  28. Boston PM Tech & Social on-line meeting tomorrow, Tues 7.30 EDT 🇺🇸 (=2330 GMT; soft start 7.00 pm for social and mic checks; JITSI not Zoom because FLOSS)

    mobilizon.us/events/fd8f4dab-1

    #Perl #Perl5

  29. Boston PM Tech & Social on-line meeting tomorrow, Tues 7.30 EDT 🇺🇸 (=2330 GMT; soft start 7.00 pm for social and mic checks; JITSI not Zoom because FLOSS)

    mobilizon.us/events/fd8f4dab-1

    #Perl #Perl5

  30. @barubary @offseq

    Nope. Perl's built-in rand is seeded by 32-bits. The size of the internal state doesn't matter.

    By making several requests to get session IDs, one can deduce the internal state of rand.

    The multiplier does nothing to improve the security. Ultimately rand is just based in 32-bits.

    #perl #cpan #cve

  31. @barubary @offseq

    Nope. Perl's built-in rand is seeded by 32-bits. The size of the internal state doesn't matter.

    By making several requests to get session IDs, one can deduce the internal state of rand.

    The multiplier does nothing to improve the security. Ultimately rand is just based in 32-bits.

    #perl #cpan #cve

  32. @barubary @offseq

    Nope. Perl's built-in rand is seeded by 32-bits. The size of the internal state doesn't matter.

    By making several requests to get session IDs, one can deduce the internal state of rand.

    The multiplier does nothing to improve the security. Ultimately rand is just based in 32-bits.

    #perl #cpan #cve

  33. @barubary @offseq

    Nope. Perl's built-in rand is seeded by 32-bits. The size of the internal state doesn't matter.

    By making several requests to get session IDs, one can deduce the internal state of rand.

    The multiplier does nothing to improve the security. Ultimately rand is just based in 32-bits.

    #perl #cpan #cve

  34. @barubary @offseq

    Nope. Perl's built-in rand is seeded by 32-bits. The size of the internal state doesn't matter.

    By making several requests to get session IDs, one can deduce the internal state of rand.

    The multiplier does nothing to improve the security. Ultimately rand is just based in 32-bits.

    #perl #cpan #cve

  35. @offseq Wow, the details are pretty wrong here.

    The session ID generation relies on an MD5 hash seeded with the built-in rand() function, which is seeded with predictable 32-bit values derived from process ID, epoch time, and object reference address.

    • Perl's built-in PRNG has a 48-bit internal state and is seeded with 48 bits, not 32 bits. Edit: See below. Perl internally seeds its PRNG with 32 bits from /dev/urandom.
    • The code in WebDyne::Session does not seed the PRNG explicitly.
    • The value passed to rand() is converted to a double-precision floating point value and acts as an upper bound on the generated number. It is not a seed.
    • WebDyne::Session effectively generates this bound as (process_id * 10_000_000_000.0 + unix_time()) * 10. The object address plays no part in this calculation. (It tries to, but the code is buggy and always multiplies by 10 instead.)

    This predictability makes the session IDs insecure and potentially guessable by attackers, risking unauthorized access.

    Yes. The generated session IDs are effectively something like md5_hex("2.84319174058601e+16").

    The vulnerability affects versions through 2. 075 and does not apply to versions 1. 042 and earlier, which are distributed separately.

    Incorrect. The vulnerability affects all versions of WebDyne::Session. The only difference is that in versions before 2.0, the "multiply by 10" code wasn't there, so the upper bound on generated random numbers was process_id * 10_000_000_000.0 + unix_time(). Everything else (md5_hex(), rand(), etc) was exactly the same.

    #perl #CPAN #cve

  36. @offseq Wow, the details are pretty wrong here.

    The session ID generation relies on an MD5 hash seeded with the built-in rand() function, which is seeded with predictable 32-bit values derived from process ID, epoch time, and object reference address.

    • Perl's built-in PRNG has a 48-bit internal state and is seeded with 48 bits, not 32 bits. Edit: See below. Perl internally seeds its PRNG with 32 bits from /dev/urandom.
    • The code in WebDyne::Session does not seed the PRNG explicitly.
    • The value passed to rand() is converted to a double-precision floating point value and acts as an upper bound on the generated number. It is not a seed.
    • WebDyne::Session effectively generates this bound as (process_id * 10_000_000_000.0 + unix_time()) * 10. The object address plays no part in this calculation. (It tries to, but the code is buggy and always multiplies by 10 instead.)

    This predictability makes the session IDs insecure and potentially guessable by attackers, risking unauthorized access.

    Yes. The generated session IDs are effectively something like md5_hex("2.84319174058601e+16").

    The vulnerability affects versions through 2. 075 and does not apply to versions 1. 042 and earlier, which are distributed separately.

    Incorrect. The vulnerability affects all versions of WebDyne::Session. The only difference is that in versions before 2.0, the "multiply by 10" code wasn't there, so the upper bound on generated random numbers was process_id * 10_000_000_000.0 + unix_time(). Everything else (md5_hex(), rand(), etc) was exactly the same.

    #perl #CPAN #cve

  37. @offseq Wow, the details are pretty wrong here.

    The session ID generation relies on an MD5 hash seeded with the built-in rand() function, which is seeded with predictable 32-bit values derived from process ID, epoch time, and object reference address.

    • Perl's built-in PRNG has a 48-bit internal state and is seeded with 48 bits, not 32 bits. Edit: See below. Perl internally seeds its PRNG with 32 bits from /dev/urandom.
    • The code in WebDyne::Session does not seed the PRNG explicitly.
    • The value passed to rand() is converted to a double-precision floating point value and acts as an upper bound on the generated number. It is not a seed.
    • WebDyne::Session effectively generates this bound as (process_id * 10_000_000_000.0 + unix_time()) * 10. The object address plays no part in this calculation. (It tries to, but the code is buggy and always multiplies by 10 instead.)

    This predictability makes the session IDs insecure and potentially guessable by attackers, risking unauthorized access.

    Yes. The generated session IDs are effectively something like md5_hex("2.84319174058601e+16").

    The vulnerability affects versions through 2. 075 and does not apply to versions 1. 042 and earlier, which are distributed separately.

    Incorrect. The vulnerability affects all versions of WebDyne::Session. The only difference is that in versions before 2.0, the "multiply by 10" code wasn't there, so the upper bound on generated random numbers was process_id * 10_000_000_000.0 + unix_time(). Everything else (md5_hex(), rand(), etc) was exactly the same.

    #perl #CPAN #cve

  38. @offseq Wow, the details are pretty wrong here.

    The session ID generation relies on an MD5 hash seeded with the built-in rand() function, which is seeded with predictable 32-bit values derived from process ID, epoch time, and object reference address.

    • Perl's built-in PRNG has a 48-bit internal state and is seeded with 48 bits, not 32 bits. Edit: See below. Perl internally seeds its PRNG with 32 bits from /dev/urandom.
    • The code in WebDyne::Session does not seed the PRNG explicitly.
    • The value passed to rand() is converted to a double-precision floating point value and acts as an upper bound on the generated number. It is not a seed.
    • WebDyne::Session effectively generates this bound as (process_id * 10_000_000_000.0 + unix_time()) * 10. The object address plays no part in this calculation. (It tries to, but the code is buggy and always multiplies by 10 instead.)

    This predictability makes the session IDs insecure and potentially guessable by attackers, risking unauthorized access.

    Yes. The generated session IDs are effectively something like md5_hex("2.84319174058601e+16").

    The vulnerability affects versions through 2. 075 and does not apply to versions 1. 042 and earlier, which are distributed separately.

    Incorrect. The vulnerability affects all versions of WebDyne::Session. The only difference is that in versions before 2.0, the "multiply by 10" code wasn't there, so the upper bound on generated random numbers was process_id * 10_000_000_000.0 + unix_time(). Everything else (md5_hex(), rand(), etc) was exactly the same.

    #perl #CPAN #cve

  39. @offseq Wow, the details are pretty wrong here.

    The session ID generation relies on an MD5 hash seeded with the built-in rand() function, which is seeded with predictable 32-bit values derived from process ID, epoch time, and object reference address.

    • Perl's built-in PRNG has a 48-bit internal state and is seeded with 48 bits, not 32 bits. Edit: See below. Perl internally seeds its PRNG with 32 bits from /dev/urandom.
    • The code in WebDyne::Session does not seed the PRNG explicitly.
    • The value passed to rand() is converted to a double-precision floating point value and acts as an upper bound on the generated number. It is not a seed.
    • WebDyne::Session effectively generates this bound as (process_id * 10_000_000_000.0 + unix_time()) * 10. The object address plays no part in this calculation. (It tries to, but the code is buggy and always multiplies by 10 instead.)

    This predictability makes the session IDs insecure and potentially guessable by attackers, risking unauthorized access.

    Yes. The generated session IDs are effectively something like md5_hex("2.84319174058601e+16").

    The vulnerability affects versions through 2. 075 and does not apply to versions 1. 042 and earlier, which are distributed separately.

    Incorrect. The vulnerability affects all versions of WebDyne::Session. The only difference is that in versions before 2.0, the "multiply by 10" code wasn't there, so the upper bound on generated random numbers was process_id * 10_000_000_000.0 + unix_time(). Everything else (md5_hex(), rand(), etc) was exactly the same.

    #perl #CPAN #cve