- if (my $uri=$W->{"r"}->unparsed_uri()) {
- if ($W->{"args"}{"Wabs"} || $args{"abs"}) {
- # FIXME: $in may not be defined here!
- # to prevent: Use of uninitialized value in ...
- if ($in=~m#^/#) {
- $in=~s#^/*##;
- }
- else {
- $in=$uri."/".$in;
- $in=~tr#/#/#s;
- 1 while $in=~s#/(?:[^/]+)/\Q..\E/#/#g
- }
- return "http://".&{$W->{"web_hostname_sub"}}()."/".(defined $in ? $in : "");
- }
- $uri.="Index" if $uri=~m#/$#;
- if (defined $in) {
- my($inpath,$inquery)=split /[?]/,$in,2;
- $inpath=~tr///cs;
- $uri=~tr///cs;
- for (;;) {
- my($in1 ,$in2 )=($in =~m#^(/[^/]+)(/.*)$#);
- my($uri1,$uri2)=($uri=~m#^(/[^/]+)(/.*)$#);
- last if !defined $in1 || !defined $uri1 || $in1 ne $uri1;
- $in=$in2;
- $uri=$uri2;
- }
- }
- $uri=~s#^/*##;
- $uri=~s#[^/]+#..#g;
- $uri=File::Basename::dirname($uri);
- my $r=$uri.(defined $in ? $in : "");
-# 1 while $r=~s#^[.]/##;
-# $r="./$r" if $r=~m#^(?:?.*)$#; # empty pathname?
- return $r;
+ cluck if !$args{"uri_as_in"} && ref $in;
+ my $uri=in_to_uri_abs($in);
+ if (uri_is_local($uri)) {
+ # Prefer the $uri values over "args_persistent" values.
+ $uri->query_form_hash({
+ map({
+ my $key=$_;
+ my $val=$W->{"args"}{$key};
+ (!defined $val ? () : ($key=>$val));
+ } keys(%{$W->{"args_persistent"}})),
+ %{$uri->query_form_hash()},
+ });