| Nemokosch | Hello, how should one interpolate a quoting construct in another quoting construct? Like shell quoting inside a string. | 07:05 | |
|
07:50
dakkar joined
|
|||
| lakmatiol | do you mean sth like | 08:09 | |
| ```perl | |||
| "the uname is $(qx{uname})" | |||
| ``` | |||
| lizmat | "foo bar { do whatever code in here } baz" | 08:15 | |
| Nemokosch | something like that, yes | 08:21 | |
| so it will require double paranthesizing, no matter what? | |||
| lizmat | well, maybe, if you could use a sub like "run" you could do something like: | 08:23 | |
| say "foo &run(<echo bar>, :out).out.slurp()" | |||
| or wrap that into a sub of your own and call that :-) | 08:24 | ||
| sub doit(@a)nsub doit(@a) { run(@a, :out).out.slurp }; say "foo &doit(<echo bar>)" | 08:25 | ||
| sub doit(@a) { run(@a, :out).out.slurp }; say "foo &doit(<echo bar>)" | 08:26 | ||
| sjn 🇳🇴 | What are you specifically trying to achieve? | 08:50 | |
| Nemokosch | interpolating command output in a string? | 08:55 | |
| this isn't an XY problem, this is really what I'm trying to achieve and I'm curious what is the idiomatic way among the many possible solutions | 08:56 | ||
| sjn 🇳🇴 | my $output = qx<echo "foo">; | 09:02 | |
|
10:09
lizmat_ joined
10:10
TempIRCLogger left,
TempIRCLogger joined
10:13
lizmat left
10:16
lizmat_ left,
lizmat joined
11:50
TempIRCLogger left
11:51
TempIRCLogger joined
|
|||
| Nemokosch | what if the command output should be a part of a longer string? | 12:33 | |
| lizmat | say "longer string $output" | 12:34 | |
| Nemokosch | and one without a temporary variable? ^^ | 12:50 | |
| lizmat | say "longer string { qx<echo foo> }" | 12:51 | |
| Nemokosch | so it does require some double bracketing | 13:01 | |
| sjn | yes, double quotes generally means interpolation allowed inside | 13:11 | |
| sjn 🇳🇴 | e.g. `say "Kernel is { qx[uname -s] }";` vs. `say 'Kernel is { qx[uname -s] }';` | 13:17 | |
| Anton Antonov | How can I find the filenames in the resources directory of module / package? The documentation here docs.raku.org/language/variables#%?RESOURCES just says : | 15:08 | |
| > The %?RESOURCES variable is not implemented as a plain Hash, but as an instance of the Distribution::Resources type, so do not expect to see all available resource files in a distribution by printing or by using other ways to inspect its value. Instead, use the API described above to access particular files. | |||
| dakkar | Anton: github.com/search?q=%22%24%3FRESOU...aku&l= may give you some examples / inspiration | 15:25 | |
| (it would be nicer if github's code search understood sigils…) | |||
| Anton Antonov | @dakkar Thanks, I am looking into those search results now... | 15:28 | |
|
15:29
dakkar left,
dakkar joined,
dakkar left,
dakkar joined
|
|||
| dakkar | (wow, my irc client dies when I click a link… that's new) | 15:30 | |
| Anton: short version: add a file at `resources/mything.txt`, mention it in `META6.json` like `"resources":["mything.txt"]`, then read it via `$?RESOURCES<mything.txt>.slurp` or similar | 15:31 | ||
| the bit of documentatino you quoted just means "don't expect to see all files by calling `keys`" | 15:32 | ||
| also, dammit, it's `%?RESOURCES` not `$?RESOURCES`… /me is still thinking in Perl5 | 15:33 | ||
| Anton Antonov | @dakkar I am familiar with what you describe -- accessing the resource files content by explicitly specifying the individual file names. My question is: Can I find the resource file names programmatically? (Not specifying them manually.) | 15:37 | |
| dakkar | no, that is explicitly not a thing you can do | ||
| Anton Antonov | @dakkar Ok. good to know! Thanks! | 15:40 | |
|
16:59
dakkar left
|
|||
| gfldex | m:``` | 18:33 | |
| class __px {} | |||
| multi postcircumfix:<{ }>(__px, @a) { "interpolation of @a[]" } | |||
| constant term:<&px> = __px; | |||
| say "&px<1 2 3>" | |||
| ``` | |||
| <@!297037173541175296> ^^^ | 18:34 | ||
| This is slightly evil tho. | 18:35 | ||
| Nemokosch | what is this? | 19:11 | |
|
19:38
TempIRCLogger left,
TempIRCLogger joined
|
|||
| gfldex | <@!297037173541175296> This a trick to get function call semantics combined with subscripts that can be used in quotes. | 20:11 | |
| m:``` | 20:12 | ||
| sub px(@a) { "interpolation of @a[]" } | |||
| say "&px<1 2 3>"; | |||
| ``` | |||
| You can't use a sub directly. At least not without parentheses. | |||
| Nemokosch | so yours works because you actually override an operator for a dummy class? | 20:13 | |
| gfldex | yes, and use a term that looks like a sub-reference. | 20:14 | |
| I didn't expect that to work tho. Rakudo is full of surprises. :) | |||
| Nemokosch | 😂 | 20:16 | |
| so this line | 20:17 | ||
| ``` | |||
| constant term:<&px> = __px; | |||
| ``` | |||
| is important here | |||
| gfldex | indeed | ||
| Nemokosch | does it require the "sigil"? | 20:18 | |
| gfldex | yes, or the quote construct would take it as verbatim | ||
| Nemokosch | so there needs to be something to remind Rakudo that some interpolation is going on | 20:20 | |
| makes sense | |||
| gfldex | I can't find this in Roast. So it might be more then just slightly evil. I shall open a problem solving issue. | 20:30 | |