in reply to Using 'keys' on a list

> but I find this kind of inelegant.

well, how would you do it in other "more elegant languages"?

> I'm far far from a monk so bear with me, but I can't see why keys doesn't provide list context.

keys HASH operates on the datatype hash not list, which means something starting with a % sigil here

> "Experimental keys on scalar is now forbidden"

that's another topic which wouldn't have helped you much, but you "probably" would have been able to write keys {f()}

Questions are:

HTH! :)

edit

my preferred way to gain elegance would be a private method, operating on a reference

my $keys = sub { my $self =shift; keys %$self }; sub f { return { a=>1, b =>2 } } print for f->$keys;

edit

> Also, is there a way of creating a hash for consumption by keys in the above situation which doesn't involve creating a hash reference from a list and then immediately dereferencing?

could you please elaborate? I don't understand the question ...

update

see also Re^10: Using 'keys' on a list (prototype & backwards compatibility) for a full explanation why your feature request can't possibly be implemented.

Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery

Replies are listed 'Best First'.
Re^2: Using 'keys' on a list
by lammey (Novice) on Jun 29, 2021 at 14:46 UTC
    Firstly, thanks for your response, much appreciated =).
    could you please elaborate? I don't understand the question ...

    I'm referring to this %{{f}} code which creates a transient hash (which keys can then operate on) from a hash reference. Perhaps I'm not using the jargon correctly, my apologies.

    I don't know of more elegant ways to do this in other languages to be honest. I was hoping that it were possible to create a transient hash more directly with something like  keys %(f) for example.

    Creating a helper routine which hides this away or adjusting the f() routine to return a hash reference would both work, but the former sacrifices the brevity I'm after and the latter may not always be feasible.
    keys HASH operates on the datatype hash not list, which means something starting with a % sigil here
    Do you know if there's a reason that it can't operate on a list?
      > Do you know if there's a reason that it can't operate on a list?

      Lists are the most basic containers in perl syntax but not a variable's data type.

      A list is not necessarily a hash, you can have odd numbers and dupplicate keys or irregular "keys"

      Keys would also be more vulnerable to syntax errors.

      Many other languages don't even know how to handle lists.

      But you're free to implement the workarounds I've shown you.

      Cheers Rolf
      (addicted to the Perl Programming Language :)
      Wikisyntax for the Monastery