On 24/03/18 09:43, Ralph Corderoy wrote:
If you are typing `get_player .* --since 70' into a Linux shell
The shell is expanding globs before invoking get_iplayer, thus they're
not seen by get_iplayer if they match anything. If they don't match
anything then they normally remain and are passed to get_iplayer anyway.
For the arguments get_iplayer does see, it decides to interpret some of
them as regexps.
«get_iplayer Railway» has no glob metacharacters to expand so one
argument is passed to get_iplayer, it uses it as a regexp, it has no
regexp metacharacters so effectively is a substring search of the
titles.
«get_iplayer R.*way» has a glob metacharacter, the «*», the shell looks
at the current directory for entries starting «R.» and ending «way».
There are none. The glob remains, unexpanded. get_iplayer has one
argument, «R.*way» that it uses as a regexp. There's two regexp
metacharacters, «.*», meaning zero or more of any character, used in the
search.
«get_iplayer R.*way» is run again, and again has a glob, the «*». This
time, the current directory has «R.steinway» in it. The argument with
the glob is expanded into that and get_iplayer has one argument,
«R.steinway», that's used as a regexp. It's unlikely to match any
titles, e.g. «Resteinway».
To avoid glob expansion, quote the glob metacharacters, «get_iplayer
'R.*way'», and get_iplayer sees the regexp «R.*way».
One thing that does not appear to have happened is infinite recursion,
or even matching of additional programmes.
Your unquoted «.*» on Linux would often expand to «. ..», and perhaps
more if you've other `dot' files present. These are two regexps
interpreted by get_iplayer. It prints titles matching either. Since
anything matching the second is also matched by the first, you are
seeing any title at least one character long. That's almost like «.*»
and «^» except that a zero-length title won't be matched.
Hi Ralph
I can see that in some special cases leaving out the quotes will give
wrong results. I only wanted a crude indication of how long it had been
since refreshing the cache had been working, but that is no excuse for
getting it wrong.
I clearly still need to think it through further. I would have expected
get_iplayer * --since 110
to match 67 programmes, but it matches 0.
I would have expected
get_iplayer '*' --since 110
to match 0 programmes but it matches 67.
If I put in an invalid regex
get_iplayer *. --since 110
get_iplayer '*.' --since 110
both seem to reach Perl as a regex even though the first has a bash
wildcard.
Quantifier follows nothing in regex; marked by <-- HERE in m/* <-- HERE
./ at /usr/bin/get_iplayer line 1245.
Best wishes
Richard
_______________________________________________
get_iplayer mailing list
get_iplayer@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/get_iplayer