如何在Perl的Mojo::URL对象中添加多个路径?
如何为Mojo::URL对象添加多个路径?
你尝试通过链式调用->path()方法给Mojo::URL对象添加多级路径,但第二次调用path()会直接覆盖之前设置的路径,导致结果不符合预期。
示例代码
perl -Mojo -E 'say new Mojo::URL("https://httpbin.org/")->path("bytes")->path($_)->to_abs for (1..3)'
期望输出
https://httpbin.org/bytes/1 https://httpbin.org/bytes/2 https://httpbin.org/bytes/3
实际输出
https://httpbin.org/1 https://httpbin.org/2 https://httpbin.org/3
解决方案
以下几种方式可以实现路径的拼接,避免覆盖问题:
- 使用
path()的数组参数形式
直接传入多个路径段,方法会自动拼接成多级路径:
perl -Mojo -E 'say new Mojo::URL("https://httpbin.org/")->path("bytes", $_)->to_abs for (1..3)'
- 使用
merge()方法合并路径
先设置基础路径,再通过merge()方法合并新的路径段:
perl -Mojo -E 'say new Mojo::URL("https://httpbin.org/")->path("bytes")->merge(Mojo::Path->new($_))->to_abs for (1..3)'
- 通过Path对象的
append()方法添加路径
先获取Mojo::Path对象,再调用append()方法添加路径段:
perl -Mojo -E 'say new Mojo::URL("https://httpbin.org/")->path->append("bytes", $_)->to_abs for (1..3)'
原因说明
Mojo::URL的path()方法如果传入单个字符串参数,会直接替换当前的完整路径;只有传入数组参数,或者借助Mojo::Path的append/merge方法,才能实现路径的拼接而非覆盖。
内容的提问来源于stack exchange,提问作者h q
相关产品推荐
相关产品推荐

